@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.
@@ -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+IGZuKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBhZGRMaXN0ZW5lcixcbiAgY3JlYXRlRWZmZWN0LFxuICBjcmVhdGVQcm94eSxcbiAgZXZlbnQsXG4gIE9uVXBkYXRlLFxuICBQRU5ESU5HX0tFWVMsXG4gIHBlbmRpbmcsXG4gIHdhdGNoXG59Il0sCiAgIm1hcHBpbmdzIjogIkFBd0JBLE1BQU0sVUFBVSxNQUFNO0FBRXRCLE1BQU0sWUFBWSxvQkFBSSxRQUFzRDtBQUc1RSxNQUFNLFVBQVUsb0JBQUksUUFBMkI7QUFHL0MsTUFBTSxlQUFlLG9CQUFJLFFBQThDO0FBR3ZFLE1BQU0sV0FBVyxvQkFBSSxJQUFnQjtBQUVyQyxNQUFNLFdBQVcsb0JBQUksUUFBeUI7QUFFOUMsU0FBUyxZQUE2QixTQUFZLFVBQXVCLFFBQWU7QUFDdEYsTUFBSSxZQUFZLFVBQVUsSUFBSSxPQUFPO0FBRXJDLE1BQUcsQ0FBQztBQUNGLGNBQVUsSUFBSSxTQUFTLFlBQVksb0JBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxNQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXBFLFFBQU0sU0FBUyxXQUFXLFNBQVksU0FBWSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBRWxFLE1BQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLENBQUM7QUFDN0IsYUFBUyxLQUFLLFNBQVMsTUFBTSxPQUFPO0FBRXRDLFlBQVUsSUFBSSxVQUFVLE1BQU07QUFFOUIsU0FBTyxNQUFNLFVBQVUsT0FBTyxRQUFRO0FBQ3hDO0FBRUEsU0FBUyxLQUFLLE9BQWMsS0FBa0I7QUFDNUMsUUFBTSxZQUFZLFVBQVUsSUFBSSxLQUFLO0FBQ3JDLFFBQU0sV0FBVyxVQUFVLElBQUksT0FBTztBQUV0QyxNQUFHLFFBQVEsUUFBUSxDQUFDO0FBQ2xCO0FBRUYsTUFBSUEsV0FBVSxRQUFRLElBQUksS0FBSztBQUUvQixNQUFHQSxVQUFRO0FBQ1QsSUFBQUEsU0FBUSxJQUFJLEdBQUc7QUFDZjtBQUFBLEVBQ0Y7QUFFQSxVQUFRLElBQUksT0FBT0EsV0FBVSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sR0FB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LCtCQUErQjtBQUUvRCxZQUFNQyxhQUFZLFVBQVUsSUFBSSxJQUFJO0FBQ3BDLFVBQUksV0FBV0EsV0FBVSxJQUFJLFFBQVE7QUFFckMsVUFBRyxDQUFDO0FBQ0YsUUFBQUEsV0FBVSxJQUFJLFVBQVUsV0FBVyxvQkFBSSxLQUFHO0FBRTVDLGVBQVMsSUFBSSxHQUFHO0FBRWhCLFlBQU0sU0FBUyxVQUFVLElBQUksS0FBSztBQUVsQyxVQUFHO0FBQ0Qsa0JBQVU7QUFBQSxVQUNSLFFBQVEsWUFBWSxPQUFPLE1BQU07QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFFRixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUk7QUFDRixZQUFNLE1BQU0sUUFBUSxhQUFhLEtBQUs7QUFDdEMsWUFBTSxNQUFNLFNBQVMsS0FBSyxZQUFZLFVBQVU7QUFDaEQsWUFBTSxRQUFRLElBQUk7QUFFbEIsY0FBUSxRQUFRLE9BQU8sT0FBTztBQUM5QixjQUFRLFNBQU87QUFDYixZQUFHLE9BQU8sT0FBTztBQUNmLGNBQUksR0FBRztBQUVULGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRixTQUNNLEtBQUk7QUFDUixVQUFHLGVBQWUsU0FBUTtBQUN4QixnQkFBUTtBQUNSLFlBQUksS0FBSyxNQUFNO0FBQUEsTUFDakI7QUFFRSxjQUFNO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVM7QUFDaEIsUUFBRztBQUNELFlBQU0sS0FBSztBQUViLFlBQVE7QUFBQSxFQUNWO0FBQUM7QUFFRCxNQUFHLGlCQUFpQixhQUFhO0FBQy9CLGtCQUFjLElBQUksT0FBTztBQUUzQixjQUFZLFFBQVEsU0FBTztBQUN6QixRQUFHLFFBQVE7QUFDVCxhQUFPO0FBQUEsYUFFRCxDQUFDO0FBQ1AsYUFBTztBQUVULFFBQUcsUUFBUSxRQUFRO0FBQ2pCLFlBQU0sSUFBSTtBQUFBLEVBQ2QsQ0FBQztBQUVELFNBQU87QUFDVDtBQUVBLElBQUk7QUFFRyxTQUFTLFFBQVEsUUFBaUI7QUFDdkMsTUFBRztBQUNELFdBQU8sTUFBTSxNQUFNO0FBQUEsSUFBQztBQUV0QixRQUFNLFVBQVU7QUFDaEIsUUFBTSxNQUFNLGdCQUFnQixvQkFBSTtBQUVoQyxTQUFPLE1BQU07QUFDWCxvQkFBZ0I7QUFFaEIsV0FBTyxNQUFNO0FBQ1gsVUFBSSxRQUFRLFFBQU0sR0FBRyxDQUFDO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBlbmRpbmciLCAia2V5IiwgInJlcyIsICJldmVudCIsICJsaXN0ZW5lcnMiXQp9Cg==
@@ -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=