@expressive/mvc 0.53.5 → 0.54.0
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.mjs +141 -0
- package/dist/esm/control.mjs +189 -0
- package/dist/esm/index.mjs +22 -0
- package/dist/esm/instruction/get.mjs +87 -0
- package/dist/esm/instruction/has.mjs +76 -0
- package/dist/esm/instruction/ref.mjs +62 -0
- package/dist/esm/instruction/set.mjs +83 -0
- package/dist/esm/instruction/use.mjs +65 -0
- package/dist/esm/model.mjs +274 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +63 -28
- package/dist/index.js.map +1 -0
- package/package.json +5 -7
- package/dist/index.mjs +0 -906
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Model, PARENT, define, uid } from "./model";
|
|
2
|
+
const LOOKUP = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
const KEYS = /* @__PURE__ */ new Map();
|
|
4
|
+
function key(T, upstream) {
|
|
5
|
+
let K = KEYS.get(T);
|
|
6
|
+
if (!K)
|
|
7
|
+
KEYS.set(T, K = Symbol(
|
|
8
|
+
typeof T == "symbol" ? "get " + T.description : String(T)
|
|
9
|
+
));
|
|
10
|
+
return upstream ? key(K) : K;
|
|
11
|
+
}
|
|
12
|
+
function keys(from, upstream) {
|
|
13
|
+
const keys2 = /* @__PURE__ */ new Set();
|
|
14
|
+
do {
|
|
15
|
+
keys2.add(key(from, upstream));
|
|
16
|
+
} while ((from = Object.getPrototypeOf(from)) !== Model);
|
|
17
|
+
return keys2;
|
|
18
|
+
}
|
|
19
|
+
class Context {
|
|
20
|
+
constructor(inputs) {
|
|
21
|
+
this.layer = /* @__PURE__ */ new Map();
|
|
22
|
+
this.cleanup = /* @__PURE__ */ new Set();
|
|
23
|
+
if (inputs)
|
|
24
|
+
this.include(inputs);
|
|
25
|
+
}
|
|
26
|
+
static get(from, callback) {
|
|
27
|
+
const waiting = LOOKUP.get(from);
|
|
28
|
+
if (waiting instanceof Context) {
|
|
29
|
+
if (callback)
|
|
30
|
+
callback(waiting);
|
|
31
|
+
return waiting;
|
|
32
|
+
}
|
|
33
|
+
if (callback)
|
|
34
|
+
if (waiting)
|
|
35
|
+
waiting.push(callback);
|
|
36
|
+
else
|
|
37
|
+
LOOKUP.set(from, [callback]);
|
|
38
|
+
}
|
|
39
|
+
/** Run callback when a specified type is registered to a **child** context. */
|
|
40
|
+
has(Type, callback) {
|
|
41
|
+
define(this, key(Type, true), { value: callback });
|
|
42
|
+
}
|
|
43
|
+
/** Find specified type registered to a parent context. Returns undefined if none are found. */
|
|
44
|
+
get(Type) {
|
|
45
|
+
const result = this[key(Type)];
|
|
46
|
+
if (result === null)
|
|
47
|
+
throw new Error(`Did find ${Type} in context, but multiple were defined.`);
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
push(inputs) {
|
|
51
|
+
const next = Object.create(this);
|
|
52
|
+
next.layer = /* @__PURE__ */ new Map();
|
|
53
|
+
next.cleanup = /* @__PURE__ */ new Set();
|
|
54
|
+
if (inputs)
|
|
55
|
+
next.include(inputs);
|
|
56
|
+
return next;
|
|
57
|
+
}
|
|
58
|
+
pop() {
|
|
59
|
+
for (const key2 of Object.getOwnPropertySymbols(this))
|
|
60
|
+
delete this[key2];
|
|
61
|
+
this.cleanup.forEach((cb) => cb());
|
|
62
|
+
this.layer.clear();
|
|
63
|
+
}
|
|
64
|
+
include(inputs, forEach) {
|
|
65
|
+
const init = /* @__PURE__ */ new Map();
|
|
66
|
+
if (typeof inputs == "function" || inputs instanceof Model)
|
|
67
|
+
inputs = { 0: inputs };
|
|
68
|
+
Object.entries(inputs).forEach(([K, V]) => {
|
|
69
|
+
if (Model.is(V) || V instanceof Model)
|
|
70
|
+
return;
|
|
71
|
+
if (K && K != V)
|
|
72
|
+
V = `${V} (as '${K}')`;
|
|
73
|
+
throw new Error(
|
|
74
|
+
`Context may only include instance or class \`extends Model\` but got ${V}.`
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
for (const key2 in inputs) {
|
|
78
|
+
const input = inputs[key2];
|
|
79
|
+
const exists = this.layer.get(key2);
|
|
80
|
+
if (!exists) {
|
|
81
|
+
const instance = this.add(input);
|
|
82
|
+
this.layer.set(key2, input);
|
|
83
|
+
init.set(instance, true);
|
|
84
|
+
} else if (exists !== input) {
|
|
85
|
+
this.pop();
|
|
86
|
+
this.id = uid();
|
|
87
|
+
this.include(inputs);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
for (const [model, explicit] of init) {
|
|
91
|
+
model.set();
|
|
92
|
+
if (typeof forEach == "function")
|
|
93
|
+
forEach(model, explicit);
|
|
94
|
+
else if (forEach && explicit)
|
|
95
|
+
model.set(forEach);
|
|
96
|
+
for (const [_key, value] of model)
|
|
97
|
+
if (PARENT.get(value) === model) {
|
|
98
|
+
this.add(value, true);
|
|
99
|
+
init.set(value, false);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
add(input, implicit) {
|
|
104
|
+
let T;
|
|
105
|
+
let I;
|
|
106
|
+
if (typeof input == "function") {
|
|
107
|
+
Model.is(input);
|
|
108
|
+
T = input;
|
|
109
|
+
I = new input();
|
|
110
|
+
this.cleanup.add(() => I.set(null));
|
|
111
|
+
} else {
|
|
112
|
+
T = input.constructor;
|
|
113
|
+
I = input;
|
|
114
|
+
}
|
|
115
|
+
keys(T, true).forEach((K) => {
|
|
116
|
+
const result = this[K];
|
|
117
|
+
if (!result)
|
|
118
|
+
return;
|
|
119
|
+
const callback = result(I);
|
|
120
|
+
if (callback)
|
|
121
|
+
this.cleanup.add(callback);
|
|
122
|
+
});
|
|
123
|
+
keys(T).forEach((K) => {
|
|
124
|
+
const value = this.hasOwnProperty(K) ? null : I;
|
|
125
|
+
if (value || this[K] !== I && !implicit)
|
|
126
|
+
define(this, K, {
|
|
127
|
+
configurable: true,
|
|
128
|
+
value
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
const waiting = LOOKUP.get(I);
|
|
132
|
+
if (waiting instanceof Array)
|
|
133
|
+
waiting.forEach((cb) => cb(this));
|
|
134
|
+
LOOKUP.set(I, this);
|
|
135
|
+
return I;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
Context
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1vZGVsLCBQQVJFTlQsIGRlZmluZSwgdWlkIH0gZnJvbSAnLi9tb2RlbCc7XG5cbmNvbnN0IExPT0tVUCA9IG5ldyBXZWFrTWFwPE1vZGVsLCBDb250ZXh0IHwgKChnb3Q6IENvbnRleHQpID0+IHZvaWQpW10+KCk7XG5jb25zdCBLRVlTID0gbmV3IE1hcDxzeW1ib2wgfCBNb2RlbC5UeXBlLCBzeW1ib2w+KCk7XG5cbmZ1bmN0aW9uIGtleShUOiBNb2RlbC5UeXBlIHwgc3ltYm9sLCB1cHN0cmVhbT86IGJvb2xlYW4pOiBzeW1ib2wge1xuICBsZXQgSyA9IEtFWVMuZ2V0KFQpO1xuXG4gIGlmKCFLKVxuICAgIEtFWVMuc2V0KFQsIEsgPSBTeW1ib2woXG4gICAgICB0eXBlb2YgVCA9PSBcInN5bWJvbFwiID8gXCJnZXQgXCIgKyBULmRlc2NyaXB0aW9uIDogU3RyaW5nKFQpXG4gICAgKSk7XG4gIFxuICByZXR1cm4gdXBzdHJlYW0gPyBrZXkoSykgOiBLO1xufVxuXG5mdW5jdGlvbiBrZXlzKGZyb206IE1vZGVsLlR5cGUsIHVwc3RyZWFtPzogYm9vbGVhbil7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN5bWJvbD4oKTtcblxuICBkbyB7XG4gICAga2V5cy5hZGQoa2V5KGZyb20sIHVwc3RyZWFtKSk7XG4gIH1cbiAgd2hpbGUoKGZyb20gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJvbSkpICE9PSBNb2RlbCk7XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmRlY2xhcmUgbmFtZXNwYWNlIENvbnRleHQge1xuICB0eXBlIE11bHRpcGxlPFQgZXh0ZW5kcyBNb2RlbD4gPSB7XG4gICAgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogTW9kZWwuSW5pdDxUPiB8IFQ7XG4gIH07XG5cbiAgdHlwZSBBY2NlcHQ8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gVCB8IE1vZGVsLkluaXQ8VD4gfCBNdWx0aXBsZTxUPjtcblxuICB0eXBlIEZvckVhY2ggPSAoYWRkZWQ6IE1vZGVsLCBleHBsaWNpdDogYm9vbGVhbikgPT4gdm9pZDtcblxuICB0eXBlIEV4cGVjdCA9IChtb2RlbDogTW9kZWwpID0+ICgoKSA9PiB2b2lkKSB8IHZvaWQ7XG59XG5cbmludGVyZmFjZSBDb250ZXh0IHtcbiAgW2tleTogc3ltYm9sXTogTW9kZWwgfCBDb250ZXh0LkV4cGVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbmNsYXNzIENvbnRleHQge1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4ob246IE1vZGVsLCBjYWxsYmFjazogKChnb3Q6IENvbnRleHQpID0+IHZvaWQpKTogdm9pZDtcbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KG9uOiBNb2RlbCk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG4gIHN0YXRpYyBnZXQoZnJvbTogTW9kZWwsIGNhbGxiYWNrPzogKGdvdDogQ29udGV4dCkgPT4gdm9pZCl7XG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoZnJvbSk7XG5cbiAgICBpZih3YWl0aW5nIGluc3RhbmNlb2YgQ29udGV4dCl7XG4gICAgICBpZihjYWxsYmFjaylcbiAgICAgICAgY2FsbGJhY2sod2FpdGluZyk7XG5cbiAgICAgIHJldHVybiB3YWl0aW5nO1xuICAgIH1cblxuICAgIGlmKGNhbGxiYWNrKVxuICAgICAgaWYod2FpdGluZykgXG4gICAgICAgIHdhaXRpbmcucHVzaChjYWxsYmFjayk7XG4gICAgICBlbHNlIFxuICAgICAgICBMT09LVVAuc2V0KGZyb20sIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBsYXllciA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNb2RlbCB8IE1vZGVsLlR5cGU+KCk7XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KXtcbiAgICBpZihpbnB1dHMpXG4gICAgICB0aGlzLmluY2x1ZGUoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgdG8gYSAqKmNoaWxkKiogY29udGV4dC4gKi9cbiAgcHVibGljIGhhczxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrOiAobW9kZWw6IFQpID0+IHZvaWQpe1xuICAgIGRlZmluZSh0aGlzLCBrZXkoVHlwZSwgdHJ1ZSksIHsgdmFsdWU6IGNhbGxiYWNrIH0pO1xuICB9XG5cbiAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC4gKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4pe1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNba2V5KFR5cGUpXTtcblxuICAgIGlmKHJlc3VsdCA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIGZpbmQgJHtUeXBlfSBpbiBjb250ZXh0LCBidXQgbXVsdGlwbGUgd2VyZSBkZWZpbmVkLmApO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHB1c2goaW5wdXRzPzogQ29udGV4dC5BY2NlcHQpe1xuICAgIGNvbnN0IG5leHQgPSBPYmplY3QuY3JlYXRlKHRoaXMpIGFzIHRoaXM7XG5cbiAgICBuZXh0LmxheWVyID0gbmV3IE1hcCgpO1xuICAgIG5leHQuY2xlYW51cCA9IG5ldyBTZXQoKTtcblxuICAgIGlmKGlucHV0cylcbiAgICAgIG5leHQuaW5jbHVkZShpbnB1dHMpO1xuXG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBwdWJsaWMgcG9wKCl7XG4gICAgZm9yKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRoaXMpKVxuICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSlba2V5XTtcblxuICAgIHRoaXMuY2xlYW51cC5mb3JFYWNoKGNiID0+IGNiKCkpO1xuICAgIHRoaXMubGF5ZXIuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbmNsdWRlPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaW5wdXRzOiBDb250ZXh0LkFjY2VwdDxUPixcbiAgICBmb3JFYWNoPzogQ29udGV4dC5Gb3JFYWNoIHwgTW9kZWwuQXNzaWduPFQ+XG4gICl7XG4gICAgY29uc3QgaW5pdCA9IG5ldyBNYXA8TW9kZWwsIGJvb2xlYW4+KCk7XG5cbiAgICBpZih0eXBlb2YgaW5wdXRzID09IFwiZnVuY3Rpb25cIiB8fCBpbnB1dHMgaW5zdGFuY2VvZiBNb2RlbClcbiAgICAgIGlucHV0cyA9IHsgMDogaW5wdXRzIH07XG5cbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goKFtLLCBWXTogW3N0cmluZywgdW5rbm93bl0pID0+IHtcbiAgICAgIGlmKE1vZGVsLmlzKFYpIHx8IFYgaW5zdGFuY2VvZiBNb2RlbClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBpZihLICYmIEsgIT0gVilcbiAgICAgICAgViA9IGAke1Z9IChhcyAnJHtLfScpYDtcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ29udGV4dCBtYXkgb25seSBpbmNsdWRlIGluc3RhbmNlIG9yIGNsYXNzIFxcYGV4dGVuZHMgTW9kZWxcXGAgYnV0IGdvdCAke1Z9LmBcbiAgICAgICk7XG4gICAgfSlcblxuICAgIGZvcihjb25zdCBrZXkgaW4gaW5wdXRzKXtcbiAgICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzW2tleV07XG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmxheWVyLmdldChrZXkpO1xuXG4gICAgICBpZighZXhpc3RzKXtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFkZChpbnB1dCk7XG5cbiAgICAgICAgdGhpcy5sYXllci5zZXQoa2V5LCBpbnB1dClcbiAgICAgICAgaW5pdC5zZXQoaW5zdGFuY2UsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gQ29udGV4dCBtdXN0IGZvcmNlLXJlc2V0IGJlY2F1c2UgaW5wdXRzIGFyZSBubyBsb25nZXIgc2FmZS5cbiAgICAgIGVsc2UgaWYoZXhpc3RzICE9PSBpbnB1dCl7ICAgIFxuICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgIHRoaXMuaW5jbHVkZShpbnB1dHMpO1xuICAgICAgfVxuICAgIH0gXG5cbiAgICBmb3IoY29uc3QgW21vZGVsLCBleHBsaWNpdF0gb2YgaW5pdCl7XG4gICAgICBtb2RlbC5zZXQoKTtcblxuICAgICAgaWYodHlwZW9mIGZvckVhY2ggPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3JFYWNoKG1vZGVsLCBleHBsaWNpdCk7XG4gICAgICBlbHNlIGlmKGZvckVhY2ggJiYgZXhwbGljaXQpXG4gICAgICAgIG1vZGVsLnNldChmb3JFYWNoKTtcblxuICAgICAgZm9yKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgbW9kZWwpXG4gICAgICAgIGlmKFBBUkVOVC5nZXQodmFsdWUgYXMgTW9kZWwpID09PSBtb2RlbCl7XG4gICAgICAgICAgdGhpcy5hZGQodmFsdWUgYXMgTW9kZWwsIHRydWUpO1xuICAgICAgICAgIGluaXQuc2V0KHZhbHVlIGFzIE1vZGVsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaW5wdXQ6IFQgfCBNb2RlbC5Jbml0PFQ+LFxuICAgIGltcGxpY2l0PzogYm9vbGVhbil7XG5cbiAgICBsZXQgVDogTW9kZWwuVHlwZTxUPjtcbiAgICBsZXQgSTogVDtcblxuICAgIGlmKHR5cGVvZiBpbnB1dCA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgTW9kZWwuaXMoaW5wdXQpO1xuXG4gICAgICBUID0gaW5wdXQ7XG4gICAgICBJID0gbmV3IGlucHV0KCkgYXMgVDtcbiAgICAgIHRoaXMuY2xlYW51cC5hZGQoKCkgPT4gSS5zZXQobnVsbCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIFQgPSBpbnB1dC5jb25zdHJ1Y3RvciBhcyBNb2RlbC5UeXBlPFQ+O1xuICAgICAgSSA9IGlucHV0O1xuICAgIH1cblxuICAgIGtleXMoVCwgdHJ1ZSkuZm9yRWFjaChLID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbS10gYXMgQ29udGV4dC5FeHBlY3QgfCB1bmRlZmluZWQ7XG4gIFxuICAgICAgaWYoIXJlc3VsdClcbiAgICAgICAgcmV0dXJuO1xuICBcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcmVzdWx0KEkpO1xuICAgICAgICBcbiAgICAgIGlmKGNhbGxiYWNrKVxuICAgICAgICB0aGlzLmNsZWFudXAuYWRkKGNhbGxiYWNrKTtcbiAgICB9KTtcblxuICAgIGtleXMoVCkuZm9yRWFjaChLID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYXNPd25Qcm9wZXJ0eShLKSA/IG51bGwgOiBJO1xuXG4gICAgICBpZih2YWx1ZSB8fCB0aGlzW0tdICE9PSBJICYmICFpbXBsaWNpdClcbiAgICAgICAgZGVmaW5lKHRoaXMsIEssIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWl0aW5nID0gTE9PS1VQLmdldChJKTtcbiAgXG4gICAgaWYod2FpdGluZyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgd2FpdGluZy5mb3JFYWNoKGNiID0+IGNiKHRoaXMpKTtcblxuICAgIExPT0tVUC5zZXQoSSwgdGhpcyk7XG5cbiAgICByZXR1cm4gSTtcbiAgfVxufVxuXG5leHBvcnQg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QUFDLFFBQU87QUFDVCxjQUFNLFdBQVcsS0FBSyxJQUFJLEtBQUs7QUFFL0IsYUFBSyxNQUFNLElBQUlBLE1BQUssS0FBSztBQUN6QixhQUFLLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDekIsV0FFUSxXQUFXLE9BQU07QUFDdkIsYUFBSyxJQUFJO0FBQ1QsYUFBSyxLQUFLLElBQUk7QUFDZCxhQUFLLFFBQVEsTUFBTTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUVBLGVBQVUsQ0FBQyxPQUFPLFFBQVEsS0FBSyxNQUFLO0FBQ2xDLFlBQU0sSUFBSTtBQUVWLFVBQUcsT0FBTyxXQUFXO0FBQ25CLGdCQUFRLE9BQU8sUUFBUTtBQUFBLGVBQ2pCLFdBQVc7QUFDakIsY0FBTSxJQUFJLE9BQU87QUFFbkIsaUJBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSztBQUN6QixZQUFHLE9BQU8sSUFBSSxLQUFjLE1BQU0sT0FBTTtBQUN0QyxlQUFLLElBQUksT0FBZ0IsSUFBSTtBQUM3QixlQUFLLElBQUksT0FBZ0IsS0FBSztBQUFBLFFBQ2hDO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFBQSxFQUVVLElBQ1IsT0FDQSxVQUFtQjtBQUVuQixRQUFJO0FBQ0osUUFBSTtBQUVKLFFBQUcsT0FBTyxTQUFTLFlBQVc7QUFDNUIsWUFBTSxHQUFHLEtBQUs7QUFFZCxVQUFJO0FBQ0osVUFBSSxJQUFJLE1BQU07QUFDZCxXQUFLLFFBQVEsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUNwQyxPQUNLO0FBQ0gsVUFBSSxNQUFNO0FBQ1YsVUFBSTtBQUFBLElBQ047QUFFQSxTQUFLLEdBQUcsSUFBSSxFQUFFLFFBQVEsT0FBSztBQUN6QixZQUFNLFNBQVMsS0FBSyxDQUFDO0FBRXJCLFVBQUcsQ0FBQztBQUNGO0FBRUYsWUFBTSxXQUFXLE9BQU8sQ0FBQztBQUV6QixVQUFHO0FBQ0QsYUFBSyxRQUFRLElBQUksUUFBUTtBQUFBLElBQzdCLENBQUM7QUFFRCxTQUFLLENBQUMsRUFBRSxRQUFRLE9BQUs7QUFDbkIsWUFBTSxRQUFRLEtBQUssZUFBZSxDQUFDLElBQUksT0FBTztBQUU5QyxVQUFHLFNBQVMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQzVCLGVBQU8sTUFBTSxHQUFHO0FBQUEsVUFDZCxjQUFjO0FBQUEsVUFDZDtBQUFBLFFBQ0YsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELFVBQU0sVUFBVSxPQUFPLElBQUksQ0FBQztBQUU1QixRQUFHLG1CQUFtQjtBQUNwQixjQUFRLFFBQVEsUUFBTSxHQUFHLElBQUksQ0FBQztBQUVoQyxXQUFPLElBQUksR0FBRyxJQUFJO0FBRWxCLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtleXMiLCAia2V5Il0KfQo=
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
const onReady = () => null;
|
|
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();
|
|
7
|
+
function addListener(subject, callback, select) {
|
|
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);
|
|
16
|
+
}
|
|
17
|
+
function emit(model, key) {
|
|
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);
|
|
40
|
+
}
|
|
41
|
+
function event(subject, key, silent) {
|
|
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());
|
|
49
|
+
if (!silent)
|
|
50
|
+
enqueue(() => {
|
|
51
|
+
emit(subject, false);
|
|
52
|
+
PENDING_KEYS.delete(subject);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
pending2.add(key);
|
|
56
|
+
if (!silent)
|
|
57
|
+
emit(subject, key);
|
|
58
|
+
}
|
|
59
|
+
function pending(subject) {
|
|
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
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function enqueue(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);
|
|
85
|
+
}
|
|
86
|
+
function createProxy(from, observer) {
|
|
87
|
+
const proxy = Object.create(from);
|
|
88
|
+
OBSERVER.set(proxy, observer);
|
|
89
|
+
return proxy;
|
|
90
|
+
}
|
|
91
|
+
function watch(from, key, value) {
|
|
92
|
+
const access = OBSERVER.get(from);
|
|
93
|
+
return access ? access(from, key, value) : value;
|
|
94
|
+
}
|
|
95
|
+
function createEffect(target, callback, argument) {
|
|
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;
|
|
128
|
+
}
|
|
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;
|
|
145
|
+
}
|
|
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;
|
|
164
|
+
}
|
|
165
|
+
let EffectContext;
|
|
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;
|
|
174
|
+
return () => {
|
|
175
|
+
ctx.forEach((fn) => fn());
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
}
|
|
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+IGZuKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBhZGRMaXN0ZW5lcixcbiAgY3JlYXRlRWZmZWN0LFxuICBjcmVhdGVQcm94eSxcbiAgZXZlbnQsXG4gIE9uVXBkYXRlLFxuICBQRU5ESU5HX0tFWVMsXG4gIHBlbmRpbmcsXG4gIHdhdGNoXG59Il0sCiAgIm1hcHBpbmdzIjogIkFBd0JBLE1BQU0sVUFBVSxNQUFNO0FBRXRCLE1BQU0sWUFBWSxvQkFBSSxRQUFzRDtBQUc1RSxNQUFNLFVBQVUsb0JBQUksUUFBMkI7QUFHL0MsTUFBTSxlQUFlLG9CQUFJLFFBQThDO0FBR3ZFLE1BQU0sV0FBVyxvQkFBSSxJQUFnQjtBQUVyQyxNQUFNLFdBQVcsb0JBQUksUUFBeUI7QUFFOUMsU0FBUyxZQUE2QixTQUFZLFVBQXVCLFFBQWU7QUFDdEYsTUFBSSxZQUFZLFVBQVUsSUFBSSxPQUFPO0FBRXJDLE1BQUcsQ0FBQztBQUNGLGNBQVUsSUFBSSxTQUFTLFlBQVksb0JBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxNQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXBFLFFBQU0sU0FBUyxXQUFXLFNBQVksU0FBWSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBRWxFLE1BQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLENBQUM7QUFDN0IsYUFBUyxLQUFLLFNBQVMsTUFBTSxPQUFPO0FBRXRDLFlBQVUsSUFBSSxVQUFVLE1BQU07QUFFOUIsU0FBTyxNQUFNLFVBQVUsT0FBTyxRQUFRO0FBQ3hDO0FBRUEsU0FBUyxLQUFLLE9BQWMsS0FBa0I7QUFDNUMsUUFBTSxZQUFZLFVBQVUsSUFBSSxLQUFLO0FBQ3JDLFFBQU0sV0FBVyxVQUFVLElBQUksT0FBTztBQUV0QyxNQUFHLFFBQVEsUUFBUSxDQUFDO0FBQ2xCO0FBRUYsTUFBSUEsV0FBVSxRQUFRLElBQUksS0FBSztBQUUvQixNQUFHQSxVQUFRO0FBQ1QsSUFBQUEsU0FBUSxJQUFJLEdBQUc7QUFDZjtBQUFBLEVBQ0Y7QUFFQSxVQUFRLElBQUksT0FBT0EsV0FBVSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFcEUsYUFBVUMsUUFBT0Q7QUFDZixlQUFVLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFDOUIsVUFBRyxDQUFDLFVBQVUsT0FBTyxJQUFJQyxJQUFHLEdBQUU7QUFDNUIsY0FBTSxRQUFRLFNBQVMsS0FBSyxPQUFPQSxNQUFLLEtBQUs7QUFFN0MsWUFBRztBQUNELGtCQUFRLEtBQUs7QUFBQSxpQkFFUCxVQUFVO0FBQ2hCLG9CQUFVLE9BQU8sUUFBUTtBQUFBLE1BQzdCO0FBRUosTUFBRyxRQUFRO0FBQ1QsY0FBVSxNQUFNO0FBRWxCLFVBQVEsT0FBTyxLQUFLO0FBQ3RCO0FBRUEsU0FBUyxNQUNQLFNBQ0EsS0FDQSxRQUFpQjtBQUVqQixNQUFHLFFBQVE7QUFDVCxXQUFPLEtBQUssU0FBUyxHQUFHO0FBRTFCLE1BQUcsQ0FBQztBQUNGLFdBQU8sS0FBSyxTQUFTLElBQUk7QUFFM0IsTUFBSUQsV0FBVSxhQUFhLElBQUksT0FBTztBQUV0QyxNQUFHLENBQUNBLFVBQVE7QUFDVixpQkFBYSxJQUFJLFNBQVNBLFdBQVUsb0JBQUksSUFBSSxDQUFDO0FBRTdDLFFBQUcsQ0FBQztBQUNGLGNBQVEsTUFBTTtBQUNaLGFBQUssU0FBUyxLQUFLO0FBQ25CLHFCQUFhLE9BQU8sT0FBTztBQUFBLE1BQzdCLENBQUM7QUFBQSxFQUNMO0FBRUEsRUFBQUEsU0FBUSxJQUFJLEdBQUc7QUFFZixNQUFHLENBQUM7QUFDRixTQUFLLFNBQVMsR0FBRztBQUNyQjtBQUVBLFNBQVMsUUFBeUIsU0FBVztBQUMzQyxNQUFHLGFBQWEsSUFBSSxPQUFPO0FBQ3pCLFdBQXVDO0FBQUEsTUFDckMsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFhLENBQUFFLFNBQU87QUFDckMsY0FBTSxTQUFTLFlBQVksU0FBUyxTQUFPO0FBQ3pDLGNBQUcsUUFBUSxNQUFLO0FBQ2QsbUJBQU87QUFDUCxtQkFBT0EsS0FBSSxLQUFLLE1BQU0sTUFBTSxLQUFLLGFBQWEsSUFBSSxPQUFPLENBQUUsQ0FBQztBQUFBLFVBQzlEO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDYjtBQUNKO0FBRUEsU0FBUyxRQUFRLGNBQTJCO0FBQzFDLE1BQUcsQ0FBQyxTQUFTO0FBQ1gsZUFBVyxNQUFNO0FBQ2YsZUFBUyxRQUFRLENBQUFDLFdBQVM7QUFDeEIsWUFBSTtBQUNGLFVBQUFBLE9BQU07QUFBQSxRQUNSLFNBQ00sS0FBSTtBQUNSLGtCQUFRLE1BQU0sR0FBRztBQUFBLFFBQ25CO0FBQUEsTUFDRixDQUFDO0FBQ0QsZUFBUyxNQUFNO0FBQUEsSUFDakIsR0FBRyxDQUFDO0FBRU4sV0FBUyxJQUFJLFlBQVk7QUFDM0I7QUFFQSxTQUFTLFlBQTZCLE1BQVMsVUFBc0I7QUFDbkUsUUFBTSxRQUFRLE9BQU8sT0FBTyxJQUFJO0FBQ2hDLFdBQVMsSUFBSSxPQUFPLFFBQVE7QUFDNUIsU0FBTztBQUNUO0FBRUEsU0FBUyxNQUFNLE1BQVcsS0FBc0IsT0FBWTtBQUMxRCxRQUFNLFNBQVMsU0FBUyxJQUFJLElBQUk7QUFDaEMsU0FBTyxTQUFTLE9BQU8sTUFBTSxLQUFLLEtBQUssSUFBSTtBQUM3QztBQVlBLFNBQVMsYUFBOEIsUUFBVyxVQUFxQixVQUFtQjtBQUN4RixRQUFNLFlBQVksVUFBVSxJQUFJLE1BQU07QUFFdEMsTUFBSTtBQUNKLE1BQUk7QUFFSixXQUFTLFNBQVE7QUFDZixRQUFJO0FBRUosVUFBTSxhQUFhLFlBQVksUUFBUSxNQUFNO0FBRTdDLGNBQVUsSUFBSSxZQUFZLFNBQVM7QUFFbkMsYUFBUyxXQUFXO0FBQ2xCLFVBQUk7QUFDRixlQUFPO0FBRVQsY0FBUTtBQUVSLFVBQUksU0FBUyxPQUFPO0FBQ2xCLGNBQU0sSUFBSTtBQUNWLGdCQUFRO0FBQUEsTUFDVjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxPQUFPLE1BQWEsS0FBc0IsT0FBWTtBQUM3RCxVQUFHLFVBQVUsVUFBYTtBQUN4QixjQUFNLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxHQUFHLCtCQUErQjtBQUUvRCxZQUFNQyxhQUFZLFVBQVUsSUFBSSxJQUFJO0FBQ3BDLFVBQUksV0FBV0EsV0FBVSxJQUFJLFFBQVE7QUFFckMsVUFBRyxDQUFDO0FBQ0YsUUFBQUEsV0FBVSxJQUFJLFVBQVUsV0FBVyxvQkFBSSxLQUFHO0FBRTVDLGVBQVMsSUFBSSxHQUFHO0FBRWhCLFlBQU0sU0FBUyxVQUFVLElBQUksS0FBSztBQUVsQyxVQUFHO0FBQ0Qsa0JBQVU7QUFBQSxVQUNSLFFBQVEsWUFBWSxPQUFPLE1BQU07QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFFRixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUk7QUFDRixZQUFNLE1BQU0sUUFBUSxhQUFhLEtBQUs7QUFDdEMsWUFBTSxNQUFNLFNBQVMsS0FBSyxZQUFZLFVBQVU7QUFDaEQsWUFBTSxRQUFRLElBQUk7QUFFbEIsY0FBUSxRQUFRLE9BQU8sT0FBTztBQUM5QixjQUFRLFNBQU87QUFDYixZQUFHLE9BQU8sT0FBTztBQUNmLGNBQUksR0FBRztBQUVULGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRixTQUNNLEtBQUk7QUFDUixVQUFHLGVBQWUsU0FBUTtBQUN4QixnQkFBUTtBQUNSLFlBQUksS0FBSyxNQUFNO0FBQUEsTUFDakI7QUFFRSxjQUFNO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVM7QUFDaEIsUUFBRztBQUNELFlBQU0sS0FBSztBQUViLFlBQVE7QUFBQSxFQUNWO0FBQUM7QUFFRCxNQUFHLGlCQUFpQixhQUFhO0FBQy9CLGtCQUFjLElBQUksT0FBTztBQUUzQixjQUFZLFFBQVEsU0FBTztBQUN6QixRQUFHLFFBQVE7QUFDVCxhQUFPO0FBQUEsYUFFRCxDQUFDO0FBQ1AsYUFBTztBQUVULFFBQUcsUUFBUSxRQUFRO0FBQ2pCLFlBQU0sSUFBSTtBQUFBLEVBQ2QsQ0FBQztBQUVELFNBQU87QUFDVDtBQUVBLElBQUk7QUFFRyxTQUFTLFFBQVEsUUFBaUI7QUFDdkMsTUFBRztBQUNELFdBQU8sTUFBTSxNQUFNO0FBQUEsSUFBQztBQUV0QixRQUFNLFVBQVU7QUFDaEIsUUFBTSxNQUFNLGdCQUFnQixvQkFBSTtBQUVoQyxTQUFPLE1BQU07QUFDWCxvQkFBZ0I7QUFFaEIsV0FBTyxNQUFNO0FBQ1gsVUFBSSxRQUFRLFFBQU0sR0FBRyxDQUFDO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBlbmRpbmciLCAia2V5IiwgInJlcyIsICJldmVudCIsICJsaXN0ZW5lcnMiXQp9Cg==
|
|
@@ -0,0 +1,22 @@
|
|
|
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==
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
function get(arg0, arg1) {
|
|
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
|
+
}
|
|
58
|
+
};
|
|
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
|
+
});
|
|
83
|
+
}
|
|
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
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Context } from "../context";
|
|
2
|
+
import { Model, update } from "../model";
|
|
3
|
+
import { use } from "./use";
|
|
4
|
+
const APPLY = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
function has(arg1, arg2) {
|
|
6
|
+
return use((key, subject) => {
|
|
7
|
+
const applied = /* @__PURE__ */ new Set();
|
|
8
|
+
const apply = () => {
|
|
9
|
+
update(subject, key, Object.freeze(Array.from(applied)));
|
|
10
|
+
};
|
|
11
|
+
if (Model.is(arg1))
|
|
12
|
+
Context.get(subject, (context) => {
|
|
13
|
+
context.has(arg1, (model) => {
|
|
14
|
+
let remove;
|
|
15
|
+
let disconnect;
|
|
16
|
+
if (applied.has(model))
|
|
17
|
+
return;
|
|
18
|
+
const callback = APPLY.get(model);
|
|
19
|
+
if (callback) {
|
|
20
|
+
const after = callback(subject);
|
|
21
|
+
if (after === false)
|
|
22
|
+
return;
|
|
23
|
+
if (typeof after == "function")
|
|
24
|
+
disconnect = after;
|
|
25
|
+
}
|
|
26
|
+
if (typeof arg2 == "function") {
|
|
27
|
+
const done2 = arg2(model, subject);
|
|
28
|
+
if (done2 === false)
|
|
29
|
+
return false;
|
|
30
|
+
remove = () => {
|
|
31
|
+
if (typeof done2 == "function")
|
|
32
|
+
done2();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
applied.add(model);
|
|
36
|
+
apply();
|
|
37
|
+
const done = () => {
|
|
38
|
+
ignore();
|
|
39
|
+
applied.delete(model);
|
|
40
|
+
apply();
|
|
41
|
+
if (disconnect)
|
|
42
|
+
disconnect();
|
|
43
|
+
if (typeof remove == "function")
|
|
44
|
+
remove();
|
|
45
|
+
};
|
|
46
|
+
const ignore = model.get(null, done);
|
|
47
|
+
return done;
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
else {
|
|
51
|
+
if (APPLY.has(subject))
|
|
52
|
+
throw new Error(`'has' callback can only be used once per model.`);
|
|
53
|
+
APPLY.set(subject, (recipient) => {
|
|
54
|
+
let remove;
|
|
55
|
+
if (arg1) {
|
|
56
|
+
remove = arg1(recipient, subject);
|
|
57
|
+
if (remove === false)
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
applied.add(recipient);
|
|
61
|
+
apply();
|
|
62
|
+
return () => {
|
|
63
|
+
applied.delete(recipient);
|
|
64
|
+
apply();
|
|
65
|
+
if (typeof remove == "function")
|
|
66
|
+
remove();
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return { value: [] };
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
has
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2hhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgTW9kZWwsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgQVBQTFkgPSBuZXcgV2Vha01hcDxNb2RlbCwgKG1vZGVsOiBNb2RlbCkgPT4gKCgpID0+IHZvaWQpIHwgYm9vbGVhbiB8IHZvaWQ+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIGhhcyB7XG4gIHR5cGUgQ2FsbGJhY2s8VCA9IGFueT4gPSAobW9kZWw6IFQsIHJlY2lwaWVudDogTW9kZWwpID0+IHZvaWQgfCBib29sZWFuIHwgKCgpID0+IHZvaWQpO1xufVxuXG5mdW5jdGlvbiBoYXMgPFQgZXh0ZW5kcyBNb2RlbD4gKHR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrPzogaGFzLkNhbGxiYWNrPFQ+KTogcmVhZG9ubHkgVFtdO1xuZnVuY3Rpb24gaGFzIChjYWxsYmFjaz86IGhhcy5DYWxsYmFjayk6IHJlYWRvbmx5IE1vZGVsW107XG4gIFxuZnVuY3Rpb24gaGFzIDxUIGV4dGVuZHMgTW9kZWw+IChcbiAgYXJnMT86IE1vZGVsLlR5cGU8VD4gfCBoYXMuQ2FsbGJhY2s8TW9kZWw+LFxuICBhcmcyPzogaGFzLkNhbGxiYWNrPFQ+KXtcblxuICByZXR1cm4gdXNlPFRbXT4oKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGNvbnN0IGFwcGxpZWQgPSBuZXcgU2V0PE1vZGVsPigpO1xuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGFwcGxpZWQpKSk7XG4gICAgfVxuXG4gICAgaWYoTW9kZWwuaXMoYXJnMSkpXG4gICAgICBDb250ZXh0LmdldChzdWJqZWN0LCBjb250ZXh0ID0+IHtcbiAgICAgICAgY29udGV4dC5oYXMoYXJnMSwgbW9kZWwgPT4ge1xuICAgICAgICAgIGxldCByZW1vdmU6ICgoKSA9PiB2b2lkKSB8IHZvaWQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGRpc2Nvbm5lY3Q6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICAgICAgaWYoYXBwbGllZC5oYXMobW9kZWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gQVBQTFkuZ2V0KG1vZGVsKTtcbiAgXG4gICAgICAgICAgaWYoY2FsbGJhY2spe1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBjYWxsYmFjayhzdWJqZWN0KTtcbiAgXG4gICAgICAgICAgICBpZihhZnRlciA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgXG4gICAgICAgICAgICBpZih0eXBlb2YgYWZ0ZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICBkaXNjb25uZWN0ID0gYWZ0ZXI7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IGFyZzIobW9kZWwsIHN1YmplY3QpO1xuICBcbiAgICAgICAgICAgIGlmKGRvbmUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlbW92ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYodHlwZW9mIGRvbmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGFwcGxpZWQuYWRkKG1vZGVsKTtcbiAgICAgICAgICBhcHBseSgpO1xuICBcbiAgICAgICAgICBjb25zdCBkb25lID0gKCkgPT4geyBcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICBcbiAgICAgICAgICAgIGFwcGxpZWQuZGVsZXRlKG1vZGVsKTtcbiAgICAgICAgICAgIGFwcGx5KCk7XG4gIFxuICAgICAgICAgICAgaWYoZGlzY29ubmVjdClcbiAgICAgICAgICAgICAgZGlzY29ubmVjdCgpO1xuICBcbiAgICAgICAgICAgIGlmKHR5cGVvZiByZW1vdmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGNvbnN0IGlnbm9yZSA9IG1vZGVsLmdldChudWxsLCBkb25lKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIGVsc2Uge1xuICAgICAgaWYoQVBQTFkuaGFzKHN1YmplY3QpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdoYXMnIGNhbGxiYWNrIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBwZXIgbW9kZWwuYCk7XG5cbiAgICAgIEFQUExZLnNldChzdWJqZWN0LCByZWNpcGllbnQgPT4ge1xuICAgICAgICBsZXQgcmVtb3ZlOiAoKCkgPT4gdm9pZCkgfCBib29sZWFuIHwgdm9pZDtcblxuICAgICAgICBpZihhcmcxKXtcbiAgICAgICAgICByZW1vdmUgPSBhcmcxKHJlY2lwaWVudCwgc3ViamVjdCk7XG4gIFxuICAgICAgICAgIGlmKHJlbW92ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBsaWVkLmFkZChyZWNpcGllbnQpO1xuICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgYXBwbGllZC5kZWxldGUocmVjaXBpZW50KTtcbiAgICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgICAgaWYodHlwZW9mIHJlbW92ZSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsdWU6IFtdIH07XG4gIH0pXG59XG5cbmV4cG9ydCB7IGhhcyB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsT0FBTyxjQUFjO0FBQzlCLFNBQVMsV0FBVztBQUVwQixNQUFNLFFBQVEsb0JBQUksUUFBZ0U7QUFTbEYsU0FBUyxJQUNQLE1BQ0EsTUFBdUI7QUFFdkIsU0FBTyxJQUFTLENBQUMsS0FBSyxZQUFZO0FBQ2hDLFVBQU0sVUFBVSxvQkFBSSxJQUFXO0FBQy9CLFVBQU0sUUFBUSxNQUFNO0FBQ2xCLGFBQU8sU0FBUyxLQUFLLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUM7QUFBQSxJQUN6RDtBQUVBLFFBQUcsTUFBTSxHQUFHLElBQUk7QUFDZCxjQUFRLElBQUksU0FBUyxhQUFXO0FBQzlCLGdCQUFRLElBQUksTUFBTSxXQUFTO0FBQ3pCLGNBQUk7QUFDSixjQUFJO0FBRUosY0FBRyxRQUFRLElBQUksS0FBSztBQUNsQjtBQUVGLGdCQUFNLFdBQVcsTUFBTSxJQUFJLEtBQUs7QUFFaEMsY0FBRyxVQUFTO0FBQ1Ysa0JBQU0sUUFBUSxTQUFTLE9BQU87QUFFOUIsZ0JBQUcsVUFBVTtBQUNYO0FBRUYsZ0JBQUcsT0FBTyxTQUFTO0FBQ2pCLDJCQUFhO0FBQUEsVUFDakI7QUFFQSxjQUFHLE9BQU8sUUFBUSxZQUFXO0FBQzNCLGtCQUFNQSxRQUFPLEtBQUssT0FBTyxPQUFPO0FBRWhDLGdCQUFHQSxVQUFTO0FBQ1YscUJBQU87QUFFVCxxQkFBUyxNQUFNO0FBQ2Isa0JBQUcsT0FBT0EsU0FBUTtBQUNoQixnQkFBQUEsTUFBSztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsa0JBQVEsSUFBSSxLQUFLO0FBQ2pCLGdCQUFNO0FBRU4sZ0JBQU0sT0FBTyxNQUFNO0FBQ2pCLG1CQUFPO0FBRVAsb0JBQVEsT0FBTyxLQUFLO0FBQ3BCLGtCQUFNO0FBRU4sZ0JBQUc7QUFDRCx5QkFBVztBQUViLGdCQUFHLE9BQU8sVUFBVTtBQUNsQixxQkFBTztBQUFBLFVBQ1g7QUFFQSxnQkFBTSxTQUFTLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFFbkMsaUJBQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxTQUNFO0FBQ0gsVUFBRyxNQUFNLElBQUksT0FBTztBQUNsQixjQUFNLElBQUksTUFBTSxpREFBaUQ7QUFFbkUsWUFBTSxJQUFJLFNBQVMsZUFBYTtBQUM5QixZQUFJO0FBRUosWUFBRyxNQUFLO0FBQ04sbUJBQVMsS0FBSyxXQUFXLE9BQU87QUFFaEMsY0FBRyxXQUFXO0FBQ1osbUJBQU87QUFBQSxRQUNYO0FBRUEsZ0JBQVEsSUFBSSxTQUFTO0FBQ3JCLGNBQU07QUFFTixlQUFPLE1BQU07QUFDWCxrQkFBUSxPQUFPLFNBQVM7QUFDeEIsZ0JBQU07QUFFTixjQUFHLE9BQU8sVUFBVTtBQUNsQixtQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQUEsRUFDckIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJkb25lIl0KfQo=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { context } from "../control";
|
|
2
|
+
import { define, update } from "../model";
|
|
3
|
+
import { use } from "./use";
|
|
4
|
+
function ref(arg, arg2) {
|
|
5
|
+
return use((key, subject, state) => {
|
|
6
|
+
let value = {};
|
|
7
|
+
if (arg === subject)
|
|
8
|
+
subject.get(() => {
|
|
9
|
+
for (const key2 in state)
|
|
10
|
+
if (typeof arg2 == "function")
|
|
11
|
+
define(value, key2, {
|
|
12
|
+
configurable: true,
|
|
13
|
+
get() {
|
|
14
|
+
const out = arg2(key2);
|
|
15
|
+
define(value, key2, { value: out });
|
|
16
|
+
return out;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
else {
|
|
20
|
+
const get = () => state[key2];
|
|
21
|
+
const set = (value2) => {
|
|
22
|
+
update(subject, key2, value2);
|
|
23
|
+
};
|
|
24
|
+
define(set, "current", { get, set });
|
|
25
|
+
define(set, "get", { value: get });
|
|
26
|
+
define(value, key2, { value: set });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
else if (typeof arg == "object")
|
|
30
|
+
throw new Error("ref instruction does not support object which is not 'this'");
|
|
31
|
+
else {
|
|
32
|
+
let unset;
|
|
33
|
+
const get = () => state[key];
|
|
34
|
+
const set = (value2) => {
|
|
35
|
+
if (!update(subject, key, value2) || !arg)
|
|
36
|
+
return;
|
|
37
|
+
if (unset)
|
|
38
|
+
unset = void unset(value2);
|
|
39
|
+
if (value2 === null && arg2 !== false)
|
|
40
|
+
return;
|
|
41
|
+
const ctx = context();
|
|
42
|
+
const out = arg.call(subject, value2);
|
|
43
|
+
const flush = ctx();
|
|
44
|
+
unset = (key2) => {
|
|
45
|
+
if (typeof out == "function")
|
|
46
|
+
out(key2);
|
|
47
|
+
flush();
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
state[key] = null;
|
|
51
|
+
value = Object.defineProperties(set, {
|
|
52
|
+
current: { get, set },
|
|
53
|
+
get: { value: get }
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
define(subject, key, { value });
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
ref
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJy4uL2NvbnRyb2wnO1xuaW1wb3J0IHsgTW9kZWwsIGRlZmluZSwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSByZWYge1xuICB0eXBlIENhbGxiYWNrPFQ+ID0gKGFyZ3VtZW50OiBUKSA9PlxuICAgICgobmV4dDogVCB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IHZvaWQgfCBib29sZWFuO1xuXG4gIGludGVyZmFjZSBPYmplY3Q8VCA9IGFueT4ge1xuICAgIChuZXh0OiBUIHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKiogQ3VycmVudCB2YWx1ZSBoZWxkIGJ5IHRoaXMgcmVmZXJlbmNlLiAqL1xuICAgIGN1cnJlbnQ6IFQgfCBudWxsO1xuXG4gICAgLyoqIFJldHJpZXZlIGN1cnJlbnQgdmFsdWUuICovXG4gICAgZ2V0KCk6IFQgfCBudWxsO1xuICB9XG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cblxuICAvKiogT2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMgb2YgYFRgLiAqL1xuICB0eXBlIFByb3h5PFQgZXh0ZW5kcyBNb2RlbD4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogT2JqZWN0PFRbUF0+IH1cbiAgICAmIHsgZ2V0KCk6IFQgfTtcblxuICB0eXBlIEN1c3RvbVByb3h5PFQgZXh0ZW5kcyBNb2RlbCwgUj4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogUiB9XG4gICAgJiB7IGdldCgpOiBUIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcy5cbiAqIEVhY2ggcHJvcGVydHkgaXMgYSBmdW5jdGlvbiB0byBzZXQgdmFsdWUgaW4gc3RhdGUgd2hlbiBpbnZva2VkLlxuICpcbiAqICpQcm9wZXJ0aWVzIGFyZSBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIHRvIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VCBleHRlbmRzIE1vZGVsPiAodGFyZ2V0OiBUKTogcmVmLlByb3h5PFQ+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIGJhc2VkIG9uIG1hbmFnZWQgdmFsdWVzLlxuICogRWFjaCBwcm9wZXJ0eSB3aWxsIGludm9rZSBtYXBwZXIgZnVuY3Rpb24gb24gZmlyc3QgYWNjZXNzIHN1cHBseVxuICogdGhlIGl0cyByZXR1cm4gdmFsdWUgZ29pbmcgZm9yd2FyZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gU291cmNlIG1vZGVsIGZyb20gd2hpY2ggdG8gcmVmZXJlbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBtYXBwZXIgLSBGdW5jdGlvbiBwcm9kdWNpbmcgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGZvciBhbnkgZ2l2ZW4gcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8TyBleHRlbmRzIE1vZGVsLCBSPlxuICAodGFyZ2V0OiBPLCBtYXBwZXI6IChrZXk6IE1vZGVsLkZpZWxkPE8+KSA9PiBSKTogcmVmLkN1c3RvbVByb3h5PE8sIFI+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWYtY29tcGF0aWJsZSBwcm9wZXJ0eS5cbiAqIFdpbGwgcGVyc2lzdCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdG8gdGhpcyBhcmUgbWFkZSBwYXJ0IG9mIGNvbnRyb2xsZXIgZXZlbnQtc3RyZWFtLlxuICpcbiAqICpPdXRwdXQgaXMgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHN5bmNocm9ub3VzbHkgZmlyZSB3aGVuIHJlZmVyZW5jZSBpcyBmaXJzdCBzZXQgb3IgZG9lcyB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VD4gKGNhbGxiYWNrPzogcmVmLkNhbGxiYWNrPFQ+KTogcmVmLk9iamVjdDxUPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmLWNvbXBhdGlibGUgcHJvcGVydHkuXG4gKiBXaWxsIHBlcnNpc3QgdmFsdWUsIGFuZCB1cGRhdGVzIHRvIHRoaXMgYXJlIG1hZGUgcGFydCBvZiBjb250cm9sbGVyIGV2ZW50LXN0cmVhbS5cbiAqXG4gKiAqT3V0cHV0IGlzIHNpbXVsdGFuZW91c2x5IGEgcmVmLWZ1bmN0aW9uIGFuZCByZWYtb2JqZWN0LCB1c2UgYXMgbmVlZGVkLipcbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBzeW5jaHJvbm91c2x5IGZpcmUgd2hlbiByZWZlcmVuY2UgaXMgZmlyc3Qgc2V0IG9yIGRvZXMgdXBkYXRlLlxuICogQHBhcmFtIGlnbm9yZU51bGwgLSBEZWZhdWx0IGB0cnVlYC4gSWYgYGZhbHNlYCwgd2lsbCBzdGlsbCBjYWxsYmFjayB3aXRoIGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gcmVmIDxUPiAoY2FsbGJhY2s6IHJlZi5DYWxsYmFjazxUIHwgbnVsbD4sIGlnbm9yZU51bGw6IGJvb2xlYW4pOiByZWYuT2JqZWN0PFQ+O1xuXG5mdW5jdGlvbiByZWY8VD4oXG4gIGFyZz86IHJlZi5DYWxsYmFjazxUPiB8IE1vZGVsLFxuICBhcmcyPzogKChrZXk6IHN0cmluZykgPT4gYW55KSB8IGJvb2xlYW4pe1xuXG4gIHJldHVybiB1c2U8VD4oKGtleSwgc3ViamVjdCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB7fTtcblxuICAgIGlmKGFyZyA9PT0gc3ViamVjdClcbiAgICAgIHN1YmplY3QuZ2V0KCgpID0+IHtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBzdGF0ZSlcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBkZWZpbmUodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGdldCgpe1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IGFyZzIoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWZpbmUodmFsdWUsIGtleSwgeyB2YWx1ZTogb3V0IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnZXQgPSAoKSA9PiBzdGF0ZVtrZXldO1xuICAgICAgICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICAgIGRlZmluZShzZXQsIFwiY3VycmVudFwiLCB7IGdldCwgc2V0IH0pO1xuICAgICAgICAgICAgZGVmaW5lKHNldCwgXCJnZXRcIiwgeyB2YWx1ZTogZ2V0IH0pO1xuICAgICAgICAgICAgZGVmaW5lKHZhbHVlLCBrZXksIHsgdmFsdWU6IHNldCB9KTtcbiAgICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgZWxzZSBpZih0eXBlb2YgYXJnID09IFwib2JqZWN0XCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWYgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBvYmplY3Qgd2hpY2ggaXMgbm90ICd0aGlzJ1wiKTtcblxuICAgIGVsc2Uge1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiBzdGF0ZVtrZXldO1xuICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlPzogYW55KSA9PiB7XG4gICAgICAgIGlmKCF1cGRhdGUoc3ViamVjdCwga2V5LCB2YWx1ZSkgfHwgIWFyZylcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYodW5zZXQpXG4gICAgICAgICAgdW5zZXQgPSB2b2lkIHVuc2V0KHZhbHVlKTtcbiAgICBcbiAgICAgICAgaWYodmFsdWUgPT09IG51bGwgJiYgYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXJnLmNhbGwoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGN0eCgpO1xuXG4gICAgICAgIHVuc2V0ID0ga2V5ID0+IHtcbiAgICAgICAgICBpZih0eXBlb2Ygb3V0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIG91dChrZXkpO1xuXG4gICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgXG4gICAgICBzdGF0ZVtrZXldID0gbnVsbDtcbiAgICAgIHZhbHVlID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc2V0LCB7XG4gICAgICAgIGN1cnJlbnQ6IHsgZ2V0LCBzZXQgfSxcbiAgICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQgfVxuICAgICAgfSkgYXMgcmVmLk9iamVjdDxUPjtcbiAgICB9XG5cbiAgICBkZWZpbmUoc3ViamVjdCwga2V5LCB7IHZhbHVlIH0pO1xuICB9KVxufVxuXG5leHBvcnQgeyByZWYgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFnQixRQUFRLGNBQWM7QUFDdEMsU0FBUyxXQUFXO0FBc0VwQixTQUFTLElBQ1AsS0FDQSxNQUF3QztBQUV4QyxTQUFPLElBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVTtBQUNyQyxRQUFJLFFBQVEsQ0FBQztBQUViLFFBQUcsUUFBUTtBQUNULGNBQVEsSUFBSSxNQUFNO0FBQ2hCLG1CQUFVQSxRQUFPO0FBQ2YsY0FBRyxPQUFPLFFBQVE7QUFDaEIsbUJBQU8sT0FBT0EsTUFBSztBQUFBLGNBQ2pCLGNBQWM7QUFBQSxjQUNkLE1BQUs7QUFDSCxzQkFBTSxNQUFNLEtBQUtBLElBQUc7QUFDcEIsdUJBQU8sT0FBT0EsTUFBSyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0YsQ0FBQztBQUFBLGVBQ0U7QUFDSCxrQkFBTSxNQUFNLE1BQU0sTUFBTUEsSUFBRztBQUMzQixrQkFBTSxNQUFNLENBQUNDLFdBQW1CO0FBQzlCLHFCQUFPLFNBQVNELE1BQUtDLE1BQUs7QUFBQSxZQUM1QjtBQUVBLG1CQUFPLEtBQUssV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ25DLG1CQUFPLEtBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLG1CQUFPLE9BQU9ELE1BQUssRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLFVBQ25DO0FBQUEsTUFDSixDQUFDO0FBQUEsYUFFSyxPQUFPLE9BQU87QUFDcEIsWUFBTSxJQUFJLE1BQU0sNkRBQTZEO0FBQUEsU0FFMUU7QUFDSCxVQUFJO0FBRUosWUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHO0FBQzNCLFlBQU0sTUFBTSxDQUFDQyxXQUFnQjtBQUMzQixZQUFHLENBQUMsT0FBTyxTQUFTLEtBQUtBLE1BQUssS0FBSyxDQUFDO0FBQ2xDO0FBRUYsWUFBRztBQUNELGtCQUFRLEtBQUssTUFBTUEsTUFBSztBQUUxQixZQUFHQSxXQUFVLFFBQVEsU0FBUztBQUM1QjtBQUVGLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGNBQU0sTUFBTSxJQUFJLEtBQUssU0FBU0EsTUFBSztBQUNuQyxjQUFNLFFBQVEsSUFBSTtBQUVsQixnQkFBUSxDQUFBRCxTQUFPO0FBQ2IsY0FBRyxPQUFPLE9BQU87QUFDZixnQkFBSUEsSUFBRztBQUVULGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLEdBQUcsSUFBSTtBQUNiLGNBQVEsT0FBTyxpQkFBaUIsS0FBSztBQUFBLFFBQ25DLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFBQSxRQUNwQixLQUFLLEVBQUUsT0FBTyxJQUFJO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLFNBQVMsS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUFBLEVBQ2hDLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsia2V5IiwgInZhbHVlIl0KfQo=
|