@expressive/mvc 0.73.0 → 0.78.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/README.md +137 -0
- package/dist/component.d.ts +87 -0
- package/dist/component.js +111 -0
- package/dist/component.js.map +1 -0
- package/dist/context.d.ts +56 -0
- package/dist/context.js +201 -0
- package/dist/context.js.map +1 -0
- package/dist/field/def.d.ts +17 -0
- package/dist/field/def.js +29 -0
- package/dist/field/def.js.map +1 -0
- package/dist/field/get.d.ts +57 -0
- package/dist/field/get.js +90 -0
- package/dist/field/get.js.map +1 -0
- package/dist/field/hot.d.ts +16 -0
- package/dist/field/hot.js +98 -0
- package/dist/field/hot.js.map +1 -0
- package/dist/field/ref.d.ts +78 -0
- package/dist/field/ref.js +85 -0
- package/dist/field/ref.js.map +1 -0
- package/dist/field/set.d.ts +59 -0
- package/dist/field/set.js +84 -0
- package/dist/field/set.js.map +1 -0
- package/dist/index.d.ts +10 -502
- package/dist/index.js +11 -872
- package/dist/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx-dev-runtime.js +3 -0
- package/dist/jsx-runtime.d.ts +90 -0
- package/dist/jsx-runtime.js +57 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/observable.d.ts +58 -0
- package/dist/observable.js +184 -0
- package/dist/observable.js.map +1 -0
- package/dist/state.d.ts +311 -0
- package/dist/state.js +424 -0
- package/dist/state.js.map +1 -0
- package/package.json +35 -18
- package/dist/esm/context.d.ts +0 -62
- package/dist/esm/context.js +0 -158
- package/dist/esm/index.d.ts +0 -8
- package/dist/esm/index.js +0 -9
- package/dist/esm/instruction/get.d.ts +0 -36
- package/dist/esm/instruction/get.js +0 -77
- package/dist/esm/instruction/ref.d.ts +0 -71
- package/dist/esm/instruction/ref.js +0 -68
- package/dist/esm/instruction/set.d.ts +0 -69
- package/dist/esm/instruction/set.js +0 -118
- package/dist/esm/instruction/use.d.ts +0 -23
- package/dist/esm/instruction/use.js +0 -56
- package/dist/esm/observable.d.ts +0 -42
- package/dist/esm/observable.js +0 -121
- package/dist/esm/state.d.ts +0 -234
- package/dist/esm/state.js +0 -293
- package/dist/index.js.map +0 -1
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { addListener, event, scope, watch } from "../observable.js";
|
|
2
|
-
import { METHOD, State, access, update } from "../state.js";
|
|
3
|
-
import { use } from "./use.js";
|
|
4
|
-
|
|
5
|
-
//#region src/instruction/set.ts
|
|
6
|
-
const STALE = /* @__PURE__ */ new WeakSet();
|
|
7
|
-
function set(value, argument) {
|
|
8
|
-
return use((key, subject, state) => {
|
|
9
|
-
if (typeof value == "symbol") throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`);
|
|
10
|
-
const property = {};
|
|
11
|
-
if (value instanceof State || value === true) {
|
|
12
|
-
let from = subject;
|
|
13
|
-
let getter;
|
|
14
|
-
if (value instanceof State) {
|
|
15
|
-
from = value;
|
|
16
|
-
getter = argument;
|
|
17
|
-
} else {
|
|
18
|
-
const fn = METHOD.get(argument) || argument;
|
|
19
|
-
getter = ((p, k) => fn.call(p, k, p));
|
|
20
|
-
}
|
|
21
|
-
const source = (resolve) => resolve(from);
|
|
22
|
-
let reset;
|
|
23
|
-
let isAsync;
|
|
24
|
-
let proxy;
|
|
25
|
-
function connect(self) {
|
|
26
|
-
reset = watch(self, (current) => {
|
|
27
|
-
proxy = current;
|
|
28
|
-
if (!(key in state) || STALE.delete(compute)) compute(!reset);
|
|
29
|
-
return (didUpdate) => {
|
|
30
|
-
if (didUpdate) {
|
|
31
|
-
STALE.add(compute);
|
|
32
|
-
event(subject, key, true);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}, false);
|
|
36
|
-
}
|
|
37
|
-
function compute(initial) {
|
|
38
|
-
let next;
|
|
39
|
-
try {
|
|
40
|
-
next = getter.call(proxy, proxy, key);
|
|
41
|
-
} catch (err) {
|
|
42
|
-
console.warn(`An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`);
|
|
43
|
-
if (initial) throw err;
|
|
44
|
-
console.error(err);
|
|
45
|
-
}
|
|
46
|
-
update(subject, key, next, !isAsync);
|
|
47
|
-
}
|
|
48
|
-
return () => {
|
|
49
|
-
if (!proxy) {
|
|
50
|
-
source(connect);
|
|
51
|
-
isAsync = true;
|
|
52
|
-
}
|
|
53
|
-
if (STALE.delete(compute)) compute();
|
|
54
|
-
return access(subject, key, !proxy);
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
if (typeof value == "function" || value instanceof Promise) {
|
|
58
|
-
function init() {
|
|
59
|
-
if (typeof value == "function") try {
|
|
60
|
-
value = attempt(value.bind(subject, key));
|
|
61
|
-
} catch (err) {
|
|
62
|
-
console.warn(`Generating initial value for ${subject}.${key} failed.`);
|
|
63
|
-
throw err;
|
|
64
|
-
}
|
|
65
|
-
property.get = argument !== false;
|
|
66
|
-
const set = (value) => subject[key] = value;
|
|
67
|
-
if (value instanceof Promise) value.then(set, (error) => {
|
|
68
|
-
event(subject, key);
|
|
69
|
-
property.get = () => {
|
|
70
|
-
throw error;
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
else set(value);
|
|
74
|
-
if (argument) return null;
|
|
75
|
-
return subject[key];
|
|
76
|
-
}
|
|
77
|
-
if (argument) addListener(subject, init, true);
|
|
78
|
-
else property.get = init;
|
|
79
|
-
} else if (value !== void 0) property.value = value;
|
|
80
|
-
if (typeof argument == "function") {
|
|
81
|
-
let unset;
|
|
82
|
-
property.set = function(value, previous) {
|
|
83
|
-
const exit = scope();
|
|
84
|
-
const returns = argument.call(this, value, previous);
|
|
85
|
-
const flush = exit();
|
|
86
|
-
if (returns === false) return false;
|
|
87
|
-
if (typeof unset == "function") unset(value);
|
|
88
|
-
unset = (next) => {
|
|
89
|
-
if (typeof returns == "function") returns(next);
|
|
90
|
-
flush();
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
} else property.set = (value) => {
|
|
94
|
-
property.get = void 0;
|
|
95
|
-
update(subject, key, value);
|
|
96
|
-
};
|
|
97
|
-
return property;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
function attempt(fn) {
|
|
101
|
-
function retry(err) {
|
|
102
|
-
if (err instanceof Promise) return err.then(compute);
|
|
103
|
-
else throw err;
|
|
104
|
-
}
|
|
105
|
-
function compute() {
|
|
106
|
-
try {
|
|
107
|
-
const output = fn();
|
|
108
|
-
return output instanceof Promise ? output.catch(retry) : output;
|
|
109
|
-
} catch (err) {
|
|
110
|
-
return retry(err);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return compute();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
//#endregion
|
|
117
|
-
export { set };
|
|
118
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnN0cnVjdGlvbi9zZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIHNjb3BlLCB3YXRjaCB9IGZyb20gJy4uL29ic2VydmFibGUnO1xuaW1wb3J0IHsgYWNjZXNzLCBldmVudCwgTUVUSE9ELCBTdGF0ZSwgdXBkYXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb24sIHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgU1RBTEUgPSBuZXcgV2Vha1NldDwoKSA9PiB2b2lkPigpO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBzZXQge1xuICB0eXBlIENhbGxiYWNrPFQsIFMgPSBhbnk+ID0gKFxuICAgIHRoaXM6IFMsXG4gICAgbmV4dDogVCxcbiAgICBwcmV2aW91czogVFxuICApID0+ICgobmV4dDogVCkgPT4gdm9pZCkgfCBQcm9taXNlPGFueT4gfCB2b2lkIHwgYm9vbGVhbjtcblxuICB0eXBlIENvbXB1dGU8VCwgUyA9IGFueT4gPSAob246IFMsIGtleTogc3RyaW5nKSA9PiBUO1xuXG4gIHR5cGUgRmFjdG9yeTxULCBTID0gYW55PiA9ICh0aGlzOiBTLCBrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxUPiB8IFQ7XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IGFzIGB1bmRlZmluZWRgIGJ1dCByZXF1aXJlZC5cbiAqXG4gKiBQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgaXQgaXMgZGVmaW5lZC4gSWYgYWNjZXNzZWQgd2hpbGUgdW5kZWZpbmVkLCBhIGh5YnJpZFxuICogYFByb21pc2VgL2BFcnJvcmAgKGFrYTogW1N1c3BlbnNlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvY29uY3VycmVudC1tb2RlLXN1c3BlbnNlLmh0bWwpKSB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gc2V0PFQgPSBhbnk+KCk6IFQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZSoqIEZhY3RvcnkgaXMgbGF6eSEgSXQgd2lsbCBvbmx5IHJ1biBpZi93aGVuIHByb3BlcnR5IGlzIGFjY2Vzc2VkLlxuICogVmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgZmFjdG9yeSByZXNvbHZlcywgd2hpY2ggd2lsbCBhbHNvIGRpc3BhdGNoIGFuIHVwZGF0ZSBmb3IgdGhlIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXQ8VD4oZmFjdG9yeTogc2V0LkZhY3Rvcnk8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqIElmIGFzeW5jLCBwcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgcmVzb2x2ZXMsIHllaWxkaW5nIGEgcmVzdWx0LlxuICogSWYgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvY2Vzc2luZywgUmVhY3QgU3VzcGVuc2Ugd2lsbCBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIGZhY3RvcnkgLSBDYWxsYmFjayBydW4gdG8gZGVycml2ZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSByZXF1aXJlZCAtIElmIHRydWUgcnVuIGZhY3RvcnkgaW1tZWRpYXRlbHkgb24gY3JlYXRpb24sIG90aGVyd2lzZSBvbiBhY2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNldDxUPihmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiwgcmVxdWlyZWQ/OiBib29sZWFuKTogVDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKlxuICogSWYgYXN5bmMsIHByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bnRpbCByZXNvbHZlcywgeWVpbGRpbmcgYSByZXN1bHQuXG4gKiBJZiBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nLCBSZWFjdCBTdXNwZW5zZSB3aWxsIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0gZmFjdG9yeSAtIENhbGxiYWNrIHJ1biB0byBkZXJyaXZlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIG9uVXBkYXRlIC0gQ2FsbGJhY2sgcnVuIHdoZW4gcHJvcGVydHkgaXMgZmluaXNoZWQgY29tcHV0aW5nIG9yIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KGZhY3Rvcnk6IHNldC5GYWN0b3J5PFQ+LCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgd2l0aCBlbXB0eSBwbGFjZWhvbGRlciBhbmQvb3IgdXBkYXRlIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFN0YXJ0aW5nIHZhbHVlIGZvciBwcm9wZXJ0eS4gSWYgdW5kZWZpbmVkLCBzdXNwZW5zZSB3aWxsIGJlIHRocm93biBvbiBhY2Nlc3MsIHVudGlsIHZhbHVlIGlzIHNldCBhbmQgYWNjZXB0ZWQgYnkgY2FsbGJhY2suXG4gKiBAcGFyYW0gb25VcGRhdGUgLSBDYWxsYmFjayBydW4gd2hlbiBwcm9wZXJ0eSBpcyBzZXQuIElmIHJldHVybnMgZmFsc2UsIHVwZGF0ZSBpcyBub3QgYWNjZXB0ZWQgYW5kIHByb3BlcnR5IHdpbGwga2VlcCBwcmV2aW91cyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogSW1wbGVtZW50IGEgcmVhY3RpdmUgY29tcHV0ZWQgdmFsdWUgdXNpbmcgYSBtZXRob2QgcmVmZXJlbmNlLlxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHJlLXJ1biB3aGVuIGFueSBhY2Nlc3NlZCBwcm9wZXJ0aWVzIGNoYW5nZS5cbiAqIFVzZSBgdHJ1ZWAgdG8gaW5kaWNhdGUgcmVhY3RpdmUgbW9kZSB3aXRoIGltcGxpY2l0IGB0aGlzYCBhcyB0aGUgc291cmNlLlxuICpcbiAqIEBwYXJhbSByZWFjdGl2ZVRvVGhpcyAtIFBhc3MgYHRydWVgIHRvIGVuYWJsZSByZWFjdGl2ZSBtb2RlIHdpdGggaW1wbGljaXQgdGhpc1xuICogQHBhcmFtIG1ldGhvZCAtIE1ldGhvZCByZWZlcmVuY2Ugb3IgY29tcHV0ZSBmdW5jdGlvbiB0byB1c2VcbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgPSBhbnk+KFxuICByZWFjdGl2ZVRvVGhpczogdHJ1ZSxcbiAgbWV0aG9kOiBzZXQuQ29tcHV0ZTxSLCBUPiB8IEZ1bmN0aW9uXG4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHJlYWN0aXZlVG8gLSBTb3VyY2Ugc3RhdGUgZnJvbSB3aGljaCBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIGEgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBjb21wdXRlIC0gQ29tcHV0ZSBmdW5jdGlvbi4gQm91bmQgdG8gYSBzdWJzY3JpYmVyLXByb3h5IG9mIHNvdXJjZSwgcmV0dXJucyBvdXRwdXQgdmFsdWUuIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgZXh0ZW5kcyBTdGF0ZT4ocmVhY3RpdmVUbzogVCwgY29tcHV0ZTogc2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG5mdW5jdGlvbiBzZXQ8VCA9IGFueT4odmFsdWU/OiB1bmtub3duLCBhcmd1bWVudD86IHVua25vd24pOiBhbnkge1xuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QsIHN0YXRlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmBcbiAgICAgICk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eTogSW5zdHJ1Y3Rpb24uRGVzY3JpcHRvciA9IHt9O1xuXG4gICAgLy8gSGFuZGxlIHJlYWN0aXZlIGNvbXB1dGUgbW9kZXNcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdGF0ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGZyb20gPSBzdWJqZWN0O1xuICAgICAgbGV0IGdldHRlcjogc2V0LkNvbXB1dGU8VCwgYW55PjtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RhdGUpIHtcbiAgICAgICAgZnJvbSA9IHZhbHVlO1xuICAgICAgICBnZXR0ZXIgPSBhcmd1bWVudCBhcyBzZXQuQ29tcHV0ZTxULCBhbnk+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWUgPT09IHRydWUsIGltcGxpY2l0IHRoaXMgd2l0aCBtZXRob2QgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGZuID0gTUVUSE9ELmdldChhcmd1bWVudCkgfHwgYXJndW1lbnQ7XG4gICAgICAgIGdldHRlciA9ICgocCwgaykgPT4gZm4uY2FsbChwLCBrLCBwKSkgYXMgc2V0LkNvbXB1dGU8VCwgYW55PjtcbiAgICAgIH1cblxuICAgICAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIFN0YXRlID0gU3RhdGU+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgICAgY29uc3Qgc291cmNlOiBTb3VyY2UgPSAocmVzb2x2ZSkgPT4gcmVzb2x2ZShmcm9tKTtcblxuICAgICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgaXNBc3luYzogYm9vbGVhbjtcbiAgICAgIGxldCBwcm94eTogYW55O1xuXG4gICAgICBmdW5jdGlvbiBjb25uZWN0KHNlbGY6IFN0YXRlKSB7XG4gICAgICAgIHJlc2V0ID0gd2F0Y2goXG4gICAgICAgICAgc2VsZixcbiAgICAgICAgICAoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcHJveHkgPSBjdXJyZW50O1xuXG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gc3RhdGUpIHx8IFNUQUxFLmRlbGV0ZShjb21wdXRlKSkgY29tcHV0ZSghcmVzZXQpO1xuXG4gICAgICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGlkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgU1RBTEUuYWRkKGNvbXB1dGUpO1xuICAgICAgICAgICAgICAgIGV2ZW50KHN1YmplY3QsIGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wdXRlKGluaXRpYWw/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBuZXh0OiBUIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dCA9IGdldHRlci5jYWxsKHByb3h5LCBwcm94eSwga2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7XG4gICAgICAgICAgICAgIGluaXRpYWwgPyAnaW5pdGlhbGl6aW5nJyA6ICdyZWZyZXNoaW5nJ1xuICAgICAgICAgICAgfSAke3N1YmplY3R9LiR7a2V5fS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbml0aWFsKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0LCAhaXNBc3luYyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghcHJveHkpIHtcbiAgICAgICAgICBzb3VyY2UoY29ubmVjdCk7XG4gICAgICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKSBjb21wdXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZhY3RvcnkvdmFsdWUgbW9kZXMgKGV4aXN0aW5nIGxvZ2ljKVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBhdHRlbXB0KHZhbHVlLmJpbmQoc3ViamVjdCwga2V5KSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBHZW5lcmF0aW5nIGluaXRpYWwgdmFsdWUgZm9yICR7c3ViamVjdH0uJHtrZXl9IGZhaWxlZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0eS5nZXQgPSBhcmd1bWVudCAhPT0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlOiBhbnkpID0+IChzdWJqZWN0W2tleV0gPSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICB2YWx1ZS50aGVuKHNldCwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXkpO1xuICAgICAgICAgICAgcHJvcGVydHkuZ2V0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIGVsc2Ugc2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoYXJndW1lbnQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0W2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCBpbml0LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5LmdldCA9IGluaXQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBwcm9wZXJ0eS5zZXQgPSBmdW5jdGlvbiAodGhpczogYW55LCB2YWx1ZTogYW55LCBwcmV2aW91czogYW55KSB7XG4gICAgICAgIGNvbnN0IGV4aXQgPSBzY29wZSgpO1xuICAgICAgICBjb25zdCByZXR1cm5zID0gYXJndW1lbnQuY2FsbCh0aGlzLCB2YWx1ZSwgcHJldmlvdXMpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGV4aXQoKTtcblxuICAgICAgICBpZiAocmV0dXJucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodHlwZW9mIHVuc2V0ID09ICdmdW5jdGlvbicpIHVuc2V0KHZhbHVlKTtcblxuICAgICAgICB1bnNldCA9IChuZXh0OiBUKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXR1cm5zID09ICdmdW5jdGlvbicpIHJldHVybnMobmV4dCk7XG5cbiAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9IGVsc2VcbiAgICAgIHByb3BlcnR5LnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5nZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0KGZuOiAoKSA9PiBhbnkpOiBhbnkge1xuICAvLyBJZ25vcmUgVFM4MDAwNjogRnVuY3Rpb24gbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgZnVuY3Rpb24gcmV0cnkoZXJyOiB1bmtub3duKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBlcnIudGhlbihjb21wdXRlKTtcbiAgICBlbHNlIHRocm93IGVycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGUoKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZm4oKTtcblxuICAgICAgcmV0dXJuIG91dHB1dCBpbnN0YW5jZW9mIFByb21pc2UgPyBvdXRwdXQuY2F0Y2gocmV0cnkpIDogb3V0cHV0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHJldHJ5KGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXB1dGUoKTtcbn1cblxuZXhwb3J0IHsgc2V0IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsTUFBTSx3QkFBUSxJQUFJLFNBQXFCO0FBa0Z2QyxTQUFTLElBQWEsT0FBaUIsVUFBeUI7QUFDOUQsUUFBTyxLQUFRLEtBQUssU0FBUyxVQUFVO0FBQ3JDLE1BQUksT0FBTyxTQUFTLFNBQ2xCLE9BQU0sSUFBSSxNQUNSLHVGQUF1RixRQUFRLEdBQUcsSUFBSSx3QkFDdkc7RUFFSCxNQUFNLFdBQW1DLEVB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
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { State } from "../state.js";
|
|
2
|
-
|
|
3
|
-
//#region src/instruction/use.d.ts
|
|
4
|
-
/**
|
|
5
|
-
* Property initializer, will run upon instance creation.
|
|
6
|
-
* Optional returned callback will run when once upon first access.
|
|
7
|
-
*/
|
|
8
|
-
type Instruction<T = any, M extends State = any> = (this: M, key: Extract<State.Field<M>, string>, thisArg: M, state: State.Values<M>) => Instruction.Descriptor<T> | ((source: M) => T) | void;
|
|
9
|
-
declare namespace Instruction {
|
|
10
|
-
type Getter<T> = (source: State) => T;
|
|
11
|
-
type Descriptor<T = any> = {
|
|
12
|
-
get?: Getter<T> | boolean;
|
|
13
|
-
set?: State.Setter<T> | boolean;
|
|
14
|
-
enumerable?: boolean;
|
|
15
|
-
value?: T;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
declare function use<T>(instruction: Instruction<T>): T extends void ? unknown : T;
|
|
19
|
-
declare function use<T extends State>(Type: State.Type<T>, required: false): T | undefined;
|
|
20
|
-
declare function use<T extends State>(Type: State.Type<T>, ready?: (i: T) => void): T;
|
|
21
|
-
//#endregion
|
|
22
|
-
export { Instruction, use };
|
|
23
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuLyoqXG4gKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAqIE9wdGlvbmFsIHJldHVybmVkIGNhbGxiYWNrIHdpbGwgcnVuIHdoZW4gb25jZSB1cG9uIGZpcnN0IGFjY2Vzcy5cbiAqL1xudHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgU3RhdGUgPSBhbnk+ID0gKHRoaXM6IE0sIGtleTogRXh0cmFjdDxTdGF0ZS5GaWVsZDxNPiwgc3RyaW5nPiwgdGhpc0FyZzogTSwgc3RhdGU6IFN0YXRlLlZhbHVlczxNPikgPT4gSW5zdHJ1Y3Rpb24uRGVzY3JpcHRvcjxUPiB8ICgoc291cmNlOiBNKSA9PiBUKSB8IHZvaWQ7XG5kZWNsYXJlIG5hbWVzcGFjZSBJbnN0cnVjdGlvbiB7XG4gICAgdHlwZSBHZXR0ZXI8VD4gPSAoc291cmNlOiBTdGF0ZSkgPT4gVDtcbiAgICB0eXBlIERlc2NyaXB0b3I8VCA9IGFueT4gPSB7XG4gICAgICAgIGdldD86IEdldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgICAgIHNldD86IFN0YXRlLlNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgICAgIGVudW1lcmFibGU/OiBib29sZWFuO1xuICAgICAgICB2YWx1ZT86IFQ7XG4gICAgfTtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlPFQ+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlYWR5PzogKGk6IFQpID0+IHZvaWQpOiBUO1xuZXhwb3J0IHsgdXNlLCBJbnN0cnVjdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFFLGNBQUE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQSxZQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDRixJQUFHLGNBQVM7Q0FBQTtFQUFXLE1BQUU7RUFBSTtFQUFLO0VBQUs7RUFBQTtFQUFTO0VBQUEsTUFBUTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hELElBQUcsTUFBQTtDQUFRO0VBQUMsTUFBUTtFQUFDO0VBQUE7RUFBYztFQUFJO0VBQUE7Q0FBSztFQUFBO0VBQUs7RUFBSTtFQUFDO0VBQU07RUFBQTtFQUFNO0NBQUE7QUFDbEUsSUFBRSxNQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNGLElBQUksTUFBQztDQUFBO0VBQUEsTUFBZTtFQUFDO0VBQU87RUFBQSxNQUFRO0VBQU87RUFBQztFQUFJO0NBQUU7RUFBQztFQUFDO0VBQU87RUFBRTtFQUFLO0VBQUE7RUFBUTtFQUFLO0VBQUM7RUFBTztFQUFHO0NBQUEifQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { PARENT, STATE, State, access, follow, uid, update } from "../state.js";
|
|
2
|
-
|
|
3
|
-
//#region src/instruction/use.ts
|
|
4
|
-
const INSTRUCTION = /* @__PURE__ */ new Map();
|
|
5
|
-
function use(arg1, arg2) {
|
|
6
|
-
if (State.is(arg1)) arg1 = childInstruction(arg1, arg2);
|
|
7
|
-
const token = Symbol("instruction-" + uid());
|
|
8
|
-
INSTRUCTION.set(token, arg1);
|
|
9
|
-
return token;
|
|
10
|
-
}
|
|
11
|
-
function childInstruction(type, arg2) {
|
|
12
|
-
return (key, subject) => {
|
|
13
|
-
function set(next) {
|
|
14
|
-
if (next ? !(next instanceof type) : arg2 !== false) throw new Error(`${subject}.${key} expected State of type ${type} but got ${next && next.constructor}.`);
|
|
15
|
-
update(subject, key, next);
|
|
16
|
-
if (next && typeof arg2 == "function") arg2(next);
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const value = new type();
|
|
20
|
-
set(value);
|
|
21
|
-
PARENT.set(value, subject);
|
|
22
|
-
value.set();
|
|
23
|
-
return { set };
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
function init() {
|
|
27
|
-
const state = STATE.get(this);
|
|
28
|
-
for (const key in this) {
|
|
29
|
-
const { value } = Object.getOwnPropertyDescriptor(this, key);
|
|
30
|
-
const instruction = INSTRUCTION.get(value);
|
|
31
|
-
if (!instruction) continue;
|
|
32
|
-
INSTRUCTION.delete(value);
|
|
33
|
-
delete this[key];
|
|
34
|
-
const output = instruction.call(this, key, this, state);
|
|
35
|
-
if (!output) continue;
|
|
36
|
-
const desc = typeof output == "object" ? output : { get: output };
|
|
37
|
-
if ("value" in desc) state[key] = desc.value;
|
|
38
|
-
const self = this;
|
|
39
|
-
Object.defineProperty(self, key, {
|
|
40
|
-
enumerable: desc.enumerable !== false,
|
|
41
|
-
get() {
|
|
42
|
-
return follow(this, key, typeof desc.get == "function" ? desc.get(this) : access(self, key, desc.get));
|
|
43
|
-
},
|
|
44
|
-
set(next) {
|
|
45
|
-
if (desc.set === false) throw new Error(`${self}.${key} is read-only.`);
|
|
46
|
-
update(self, key, next, desc.set);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
State.on(init);
|
|
53
|
-
|
|
54
|
-
//#endregion
|
|
55
|
-
export { use };
|
|
56
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnN0cnVjdGlvbi91c2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWNjZXNzLCBmb2xsb3csIFN0YXRlLCBQQVJFTlQsIFNUQVRFLCB1aWQsIHVwZGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcblxuLyoqXG4gKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAqIE9wdGlvbmFsIHJldHVybmVkIGNhbGxiYWNrIHdpbGwgcnVuIHdoZW4gb25jZSB1cG9uIGZpcnN0IGFjY2Vzcy5cbiAqL1xudHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgU3RhdGUgPSBhbnk+ID1cbiAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWxsb3cgZm9yIG51bWJlcnMvc3ltYm9sIHByb3BlcnRpZXM/XG4gIChcbiAgICB0aGlzOiBNLFxuICAgIGtleTogRXh0cmFjdDxTdGF0ZS5GaWVsZDxNPiwgc3RyaW5nPixcbiAgICB0aGlzQXJnOiBNLFxuICAgIHN0YXRlOiBTdGF0ZS5WYWx1ZXM8TT5cbiAgKSA9PiBJbnN0cnVjdGlvbi5EZXNjcmlwdG9yPFQ+IHwgKChzb3VyY2U6IE0pID0+IFQpIHwgdm9pZDtcblxuZGVjbGFyZSBuYW1lc3BhY2UgSW5zdHJ1Y3Rpb24ge1xuICB0eXBlIEdldHRlcjxUPiA9IChzb3VyY2U6IFN0YXRlKSA9PiBUO1xuXG4gIHR5cGUgRGVzY3JpcHRvcjxUID0gYW55PiA9IHtcbiAgICBnZXQ/OiBHZXR0ZXI8VD4gfCBib29sZWFuO1xuICAgIHNldD86IFN0YXRlLlNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgZW51bWVyYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWU/OiBUO1xuICB9O1xufVxuXG5jb25zdCBJTlNUUlVDVElPTiA9IG5ldyBNYXA8c3ltYm9sLCBJbnN0cnVjdGlvbj4oKTtcblxuZnVuY3Rpb24gdXNlPFQ+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5cbmZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFxuICBUeXBlOiBTdGF0ZS5UeXBlPFQ+LFxuICByZXF1aXJlZDogZmFsc2Vcbik6IFQgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlYWR5PzogKGk6IFQpID0+IHZvaWQpOiBUO1xuXG5mdW5jdGlvbiB1c2UoXG4gIGFyZzE6IFN0YXRlLlR5cGUgfCBJbnN0cnVjdGlvbixcbiAgYXJnMj86ICgoaTogU3RhdGUpID0+IHZvaWQpIHwgYm9vbGVhblxuKSB7XG4gIGlmIChTdGF0ZS5pcyhhcmcxKSkgYXJnMSA9IGNoaWxkSW5zdHJ1Y3Rpb24oYXJnMSwgYXJnMik7XG5cbiAgY29uc3QgdG9rZW4gPSBTeW1ib2woJ2luc3RydWN0aW9uLScgKyB1aWQoKSk7XG4gIElOU1RSVUNUSU9OLnNldCh0b2tlbiwgYXJnMSk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGRJbnN0cnVjdGlvbihcbiAgdHlwZTogU3RhdGUuVHlwZTxTdGF0ZT4sXG4gIGFyZzI/OiAoKGk6IFN0YXRlKSA9PiB2b2lkKSB8IGJvb2xlYW5cbik6IEluc3RydWN0aW9uPGFueSwgYW55PiB7XG4gIHJldHVybiAoa2V5LCBzdWJqZWN0KSA9PiB7XG4gICAgZnVuY3Rpb24gc2V0KG5leHQ6IFN0YXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobmV4dCA/ICEobmV4dCBpbnN0YW5jZW9mIHR5cGUpIDogYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtzdWJqZWN0fS4ke2tleX0gZXhwZWN0ZWQgU3RhdGUgb2YgdHlwZSAke3R5cGV9IGJ1dCBnb3QgJHtcbiAgICAgICAgICAgIG5leHQgJiYgbmV4dC5jb25zdHJ1Y3RvclxuICAgICAgICAgIH0uYFxuICAgICAgICApO1xuXG4gICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0KTtcblxuICAgICAgaWYgKG5leHQgJiYgdHlwZW9mIGFyZzIgPT0gJ2Z1bmN0aW9uJykgYXJnMihuZXh0KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IHR5cGUoKTtcblxuICAgIHNldCh2YWx1ZSk7XG4gICAgUEFSRU5ULnNldCh2YWx1ZSwgc3ViamVjdCk7XG4gICAgdmFsdWUuc2V0KCk7XG5cbiAgICByZXR1cm4geyBzZXQgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdCh0aGlzOiBTdGF0ZSkge1xuICBjb25zdCBzdGF0ZSA9IFNUQVRFLmdldCh0aGlzKSE7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcykge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywga2V5KSE7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBJTlNUUlVDVElPTi5nZXQodmFsdWUpO1xuXG4gICAgaWYgKCFpbnN0cnVjdGlvbikgY29udGludWU7XG5cbiAgICBJTlNUUlVDVElPTi5kZWxldGUodmFsdWUpO1xuICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpW2tleV07XG5cbiAgICBjb25zdCBvdXRwdXQgPSBpbnN0cnVjdGlvbi5jYWxsKHRoaXMsIGtleSwgdGhpcywgc3RhdGUpO1xuXG4gICAgaWYgKCFvdXRwdXQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVzYyA9IHR5cGVvZiBvdXRwdXQgPT0gJ29iamVjdCcgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSBzdGF0ZVtrZXldID0gZGVzYy52YWx1ZTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlICE9PSBmYWxzZSxcbiAgICAgIGdldCh0aGlzOiBTdGF0ZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHR5cGVvZiBkZXNjLmdldCA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGFjY2VzcyhzZWxmLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KSB7XG4gICAgICAgIGlmIChkZXNjLnNldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2VsZn0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZShzZWxmLCBrZXksIG5leHQsIGRlc2Muc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5TdGF0ZS5vbihpbml0KTtcblxuZXhwb3J0IHsgdXNlLCBJbnN0cnVjdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUEwQkEsTUFBTSw4QkFBYyxJQUFJLEtBQTBCO0FBV2xELFNBQVMsSUFDUCxNQUNBLE1BQ0E7QUFDQSxLQUFJLE1BQU0sR0FBRyxLQUFLLENBQUUsUUFBTyxpQkFBaUIsTUFBTSxLQUFLO0NBRXZELE1BQU0sUUFBUSxPQUFPLGlCQUFpQixLQUFLLENBQUM7QUFDNUMsYUFBWSxJQUFJLE9BQU8sS0FBSztBQUM1QixRQUFPOztBQUdULFNBQVMsaUJBQ1AsTUFDQSxNQUN1QjtBQUN2QixTQUFRLEtBQUssWUFBWTtFQUN2QixTQUFTLElBQUksTUFBeUI7QUFDcEMsT0FBSSxPQUFPLEVBQUUsZ0JBQWdCLFFBQVEsU0FBUyxNQUM1QyxPQUFNLElBQUksTUFDUixHQUFHLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixLQUFLLFdBQy9DLFFBQVEsS0FBSyxZQUNkLEdBQ0Y7QUFFSCxVQUFPLFNBQVMsS0FBSyxLQUFLO0FBRTFCLE9BQUksUUFBUSxPQUFPLFFBQVEsV0FBWSxNQUFLLEtBQUs7QUFFakQsVUFBTzs7RUFHVCxNQUFNLFFBQVEsSUFBSSxNQUFNO0FBRXhCLE1BQUksTUFBTTtBQUNWLFNBQU8sSUFBSSxPQUFPLFFBQVE7QUFDMUIsUUFBTSxLQUFLO0FBRVgsU0FBTyxFQUFFLEtBQUs7OztBQUlsQixTQUFTLE9BQWtCO0NBQ3pCLE1BQU0sUUFBUSxNQUFNLElBQUksS0FBSztBQUU3QixNQUFLLE1BQU0sT0FBTyxNQUFNO0VBQ3RCLE1BQU0sRUFBRSxVQUFVLE9BQU8seUJBQXlCLE1BQU0sSUFBSTtFQUM1RCxNQUFNLGNBQWMsWUFBWSxJQUFJLE1BQU07QUFFMUMsTUFBSSxDQUFDLFlBQWE7QUFFbEIsY0FBWSxPQUFPLE1BQU07QUFDekIsU0FBUSxLQUFhO0VBRXJCLE1BQU0sU0FBUyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUV2RCxNQUFJLENBQUMsT0FBUTtFQUViLE1BQU0sT0FBTyxPQUFPLFVBQVUsV0FBVyxTQUFTLEVBQUUsS0FBSyxRQUFRO0FBRWpFLE1BQUksV0FBVyxLQUFNLE9BQU0sT0FBTyxLQUFLO0VBRXZDLE1BQU0sT0FBTztBQUViLFNBQU8sZUFBZSxNQUFNLEtBQUs7R0FDL0IsWUFBWSxLQUFLLGVBQWU7R0FDaEMsTUFBaUI7QUFDZixXQUFPLE9BQ0wsTUFDQSxLQUNBLE9BQU8sS0FBSyxPQUFPLGFBQ2YsS0FBSyxJQUFJLEtBQUssR0FDZCxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FDaEM7O0dBRUgsSUFBSSxNQUFNO0FBQ1IsUUFBSSxLQUFLLFFBQVEsTUFDZixPQUFNLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLGdCQUFnQjtBQUdqRCxXQUFPLE1BQU0sS0FBSyxNQUFNLEtBQUssSUFBSTs7R0FFcEMsQ0FBQzs7QUFHSixRQUFPOztBQUdULE1BQU0sR0FBRyxLQUFLIn0=
|
package/dist/esm/observable.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
//#region src/observable.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Update callback function.
|
|
4
|
-
*
|
|
5
|
-
* @param key -
|
|
6
|
-
* - `string` - property which has updated.
|
|
7
|
-
* - `false` - a normal update has completed.
|
|
8
|
-
* - `true` - initial event; instance is ready.
|
|
9
|
-
* - `null` - terminal event; instance is expired.
|
|
10
|
-
* @param source - Instance of State for which update has occured.
|
|
11
|
-
*/
|
|
12
|
-
type Notify<T extends Observable = any> = (this: T, key: Event, source: T) => (() => void) | null | void;
|
|
13
|
-
type Effect<T extends Observable> = (proxy: T) => ((update: boolean | null) => void) | Promise<void> | null | void;
|
|
14
|
-
type Event = number | string | null | boolean | symbol;
|
|
15
|
-
type PromiseLite<T = void> = {
|
|
16
|
-
then: (callback: () => T) => T;
|
|
17
|
-
};
|
|
18
|
-
declare namespace Observable {
|
|
19
|
-
type Callback = () => void | PromiseLite;
|
|
20
|
-
}
|
|
21
|
-
interface Observable {
|
|
22
|
-
[Observable](callback: Observable.Callback, required?: boolean): this | void;
|
|
23
|
-
}
|
|
24
|
-
declare const Observable: unique symbol;
|
|
25
|
-
/** Update register. */
|
|
26
|
-
declare const PENDING_KEYS: WeakMap<Observable, Set<string | number | symbol>>;
|
|
27
|
-
declare function addListener<T extends Observable>(subject: T, callback: Notify<T>, select?: Event | Set<Event>): () => boolean;
|
|
28
|
-
declare function event(subject: Observable, key?: string | number | symbol | null, silent?: boolean): void;
|
|
29
|
-
/**
|
|
30
|
-
* Create a side-effect which will update whenever values accessed change.
|
|
31
|
-
* Callback is called immediately and whenever values are stale.
|
|
32
|
-
*
|
|
33
|
-
* @param target - Instance of State to observe.
|
|
34
|
-
* @param callback - Function to invoke when values change.
|
|
35
|
-
* @param requireValues - If `true` will throw if accessing a value which is `undefined`.
|
|
36
|
-
*/
|
|
37
|
-
declare function watch<T extends Observable>(target: T, callback: Effect<Required<T>>, requireValues: true): () => void;
|
|
38
|
-
declare function watch<T extends Observable>(target: T, callback: Effect<T>, recursive?: boolean): () => void;
|
|
39
|
-
declare function scope(): () => () => void;
|
|
40
|
-
//#endregion
|
|
41
|
-
export { Notify, Observable, PENDING_KEYS, addListener, event, scope, watch };
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmxlLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVcGRhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGtleSAtXG4gKiAgIC0gYHN0cmluZ2AgLSBwcm9wZXJ0eSB3aGljaCBoYXMgdXBkYXRlZC5cbiAqICAgLSBgZmFsc2VgIC0gYSBub3JtYWwgdXBkYXRlIGhhcyBjb21wbGV0ZWQuXG4gKiAgIC0gYHRydWVgIC0gaW5pdGlhbCBldmVudDsgaW5zdGFuY2UgaXMgcmVhZHkuXG4gKiAgIC0gYG51bGxgIC0gdGVybWluYWwgZXZlbnQ7IGluc3RhbmNlIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0gc291cmNlIC0gSW5zdGFuY2Ugb2YgU3RhdGUgZm9yIHdoaWNoIHVwZGF0ZSBoYXMgb2NjdXJlZC5cbiAqL1xudHlwZSBOb3RpZnk8VCBleHRlbmRzIE9ic2VydmFibGUgPSBhbnk+ID0gKHRoaXM6IFQsIGtleTogRXZlbnQsIHNvdXJjZTogVCkgPT4gKCgpID0+IHZvaWQpIHwgbnVsbCB8IHZvaWQ7XG50eXBlIEVmZmVjdDxUIGV4dGVuZHMgT2JzZXJ2YWJsZT4gPSAocHJveHk6IFQpID0+ICgodXBkYXRlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCkgfCBQcm9taXNlPHZvaWQ+IHwgbnVsbCB8IHZvaWQ7XG50eXBlIEV2ZW50ID0gbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW4gfCBzeW1ib2w7XG50eXBlIFByb21pc2VMaXRlPFQgPSB2b2lkPiA9IHtcbiAgICB0aGVuOiAoY2FsbGJhY2s6ICgpID0+IFQpID0+IFQ7XG59O1xuZGVjbGFyZSBuYW1lc3BhY2UgT2JzZXJ2YWJsZSB7XG4gICAgdHlwZSBDYWxsYmFjayA9ICgpID0+IHZvaWQgfCBQcm9taXNlTGl0ZTtcbn1cbmludGVyZmFjZSBPYnNlcnZhYmxlIHtcbiAgICBbT2JzZXJ2YWJsZV0oY2FsbGJhY2s6IE9ic2VydmFibGUuQ2FsbGJhY2ssIHJlcXVpcmVkPzogYm9vbGVhbik6IHRoaXMgfCB2b2lkO1xufVxuZGVjbGFyZSBjb25zdCBPYnNlcnZhYmxlOiB1bmlxdWUgc3ltYm9sO1xuLyoqIFVwZGF0ZSByZWdpc3Rlci4gKi9cbmRlY2xhcmUgY29uc3QgUEVORElOR19LRVlTOiBXZWFrTWFwPE9ic2VydmFibGUsIFNldDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+PjtcbmRlY2xhcmUgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIE9ic2VydmFibGU+KHN1YmplY3Q6IFQsIGNhbGxiYWNrOiBOb3RpZnk8VD4sIHNlbGVjdD86IEV2ZW50IHwgU2V0PEV2ZW50Pik6ICgpID0+IGJvb2xlYW47XG5kZWNsYXJlIGZ1bmN0aW9uIGV2ZW50KHN1YmplY3Q6IE9ic2VydmFibGUsIGtleT86IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IG51bGwsIHNpbGVudD86IGJvb2xlYW4pOiB2b2lkO1xuLyoqXG4gKiBDcmVhdGUgYSBzaWRlLWVmZmVjdCB3aGljaCB3aWxsIHVwZGF0ZSB3aGVuZXZlciB2YWx1ZXMgYWNjZXNzZWQgY2hhbmdlLlxuICogQ2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFuZCB3aGVuZXZlciB2YWx1ZXMgYXJlIHN0YWxlLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBJbnN0YW5jZSBvZiBTdGF0ZSB0byBvYnNlcnZlLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdmFsdWVzIGNoYW5nZS5cbiAqIEBwYXJhbSByZXF1aXJlVmFsdWVzIC0gSWYgYHRydWVgIHdpbGwgdGhyb3cgaWYgYWNjZXNzaW5nIGEgdmFsdWUgd2hpY2ggaXMgYHVuZGVmaW5lZGAuXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gd2F0Y2g8VCBleHRlbmRzIE9ic2VydmFibGU+KHRhcmdldDogVCwgY2FsbGJhY2s6IEVmZmVjdDxSZXF1aXJlZDxUPj4sIHJlcXVpcmVWYWx1ZXM6IHRydWUpOiAoKSA9PiB2b2lkO1xuZGVjbGFyZSBmdW5jdGlvbiB3YXRjaDxUIGV4dGVuZHMgT2JzZXJ2YWJsZT4odGFyZ2V0OiBULCBjYWxsYmFjazogRWZmZWN0PFQ+LCByZWN1cnNpdmU/OiBib29sZWFuKTogKCkgPT4gdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNjb3BlKCk6ICgpID0+ICgpID0+IHZvaWQ7XG5leHBvcnQgeyBhZGRMaXN0ZW5lciwgd2F0Y2gsIGV2ZW50LCBOb3RpZnksIFBFTkRJTkdfS0VZUywgT2JzZXJ2YWJsZSB9O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBRSxTQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDRixJQUFHLFNBQU87Q0FBQTtFQUFBLE1BQVM7RUFBQTtFQUFRO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFDLFFBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxFQUFBO0NBQUE7QUFDRCxJQUFJLGNBQVU7Q0FBQTtFQUFBLE1BQUEsQ0FBQSxHQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBSSxhQUFhO0NBQUM7T0FBUyxDQUFBLFlBQVU7Q0FBQSxDQUFBLElBQU8sR0FBQTtDQUFBO0FBQzVDLElBQUksYUFBYTtDQUFDO09BQVEsQ0FBQSxXQUFXLFNBQVM7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzlDLElBQUksYUFBWTtDQUFBO09BQVEsRUFBSztDQUFFLEVBQUE7Q0FBQTtBQUMvQixJQUFJLGVBQVk7Q0FBQTtPQUFjO0VBQUM7RUFBWTtFQUFDO0VBQU87Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkQsSUFBSSxjQUFjO0NBQUM7RUFBQSxNQUFTO0VBQUE7RUFBYTtFQUFBO0VBQU07RUFBTztFQUFJO0VBQU87RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakUsSUFBRSxRQUFBO0NBQUE7T0FBQSxDQUFBLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNGLElBQUksUUFBUTtDQUFDO0VBQUMsTUFBUTtFQUFBO0VBQWE7RUFBRztFQUFHO0VBQVU7RUFBTTtDQUFBO0VBQUE7RUFBTztFQUFBO0VBQVM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUE7Q0FBSTtBQUNqRyxJQUFJLFFBQVE7Q0FBQztFQUFDLE1BQVE7RUFBQTtFQUFhO0VBQUU7RUFBQTtFQUFXO0NBQUU7RUFBQztFQUFDO0VBQU87RUFBQztFQUFPO0VBQUc7RUFBSztFQUFJO0VBQUE7Q0FBSTtBQUNuRixJQUFXLFFBQVE7Q0FBQztPQUFVLEVBQUM7Q0FBQSxFQUFLO0NBQUMifQ==
|
package/dist/esm/observable.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
//#region src/observable.ts
|
|
2
|
-
const Observable = Symbol("observe");
|
|
3
|
-
/** Placeholder event determines if state is initialized or not. */
|
|
4
|
-
const onReady = () => null;
|
|
5
|
-
const LISTENERS = /* @__PURE__ */ new WeakMap();
|
|
6
|
-
/** Events pending for a given object. */
|
|
7
|
-
const PENDING = /* @__PURE__ */ new WeakMap();
|
|
8
|
-
/** Update register. */
|
|
9
|
-
const PENDING_KEYS = /* @__PURE__ */ new WeakMap();
|
|
10
|
-
/** Central event dispatch. Bunches all updates to occur at same time. */
|
|
11
|
-
const DISPATCH = /* @__PURE__ */ new Set();
|
|
12
|
-
function addListener(subject, callback, select) {
|
|
13
|
-
let listeners = LISTENERS.get(subject);
|
|
14
|
-
if (!listeners) LISTENERS.set(subject, listeners = new Map([[onReady, void 0]]));
|
|
15
|
-
if (select !== void 0 && !(select instanceof Set)) select = new Set([select]);
|
|
16
|
-
if (!listeners.has(onReady) && !select) callback.call(subject, true, subject);
|
|
17
|
-
listeners.set(callback, select);
|
|
18
|
-
return () => listeners.delete(callback);
|
|
19
|
-
}
|
|
20
|
-
function emit(state, key) {
|
|
21
|
-
const listeners = LISTENERS.get(state);
|
|
22
|
-
const notReady = listeners.has(onReady);
|
|
23
|
-
if (key === true && !notReady) return;
|
|
24
|
-
let pending = PENDING.get(state);
|
|
25
|
-
if (pending) {
|
|
26
|
-
pending.add(key);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
PENDING.set(state, pending = new Set(notReady ? [true, key] : [key]));
|
|
30
|
-
for (const key of pending) for (const [callback, filter] of listeners) if (!filter || filter.has(key)) {
|
|
31
|
-
const after = callback.call(state, key, state);
|
|
32
|
-
if (after) enqueue(after);
|
|
33
|
-
else if (after === null) listeners.delete(callback);
|
|
34
|
-
}
|
|
35
|
-
if (key === null) listeners.clear();
|
|
36
|
-
PENDING.delete(state);
|
|
37
|
-
}
|
|
38
|
-
function event(subject, key, silent) {
|
|
39
|
-
if (key === null) return emit(subject, key);
|
|
40
|
-
if (!key) return emit(subject, true);
|
|
41
|
-
let pending = PENDING_KEYS.get(subject);
|
|
42
|
-
if (!pending) {
|
|
43
|
-
PENDING_KEYS.set(subject, pending = /* @__PURE__ */ new Set());
|
|
44
|
-
if (!silent) enqueue(() => {
|
|
45
|
-
emit(subject, false);
|
|
46
|
-
PENDING_KEYS.delete(subject);
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
pending.add(key);
|
|
50
|
-
if (!silent) emit(subject, key);
|
|
51
|
-
}
|
|
52
|
-
function enqueue(eventHandler) {
|
|
53
|
-
if (!DISPATCH.size) setTimeout(() => {
|
|
54
|
-
DISPATCH.forEach((event) => {
|
|
55
|
-
try {
|
|
56
|
-
event();
|
|
57
|
-
} catch (err) {
|
|
58
|
-
console.error(err);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
DISPATCH.clear();
|
|
62
|
-
}, 0);
|
|
63
|
-
DISPATCH.add(eventHandler);
|
|
64
|
-
}
|
|
65
|
-
function watch(target, callback, argument) {
|
|
66
|
-
let unset;
|
|
67
|
-
let reset;
|
|
68
|
-
function invoke() {
|
|
69
|
-
let ignore = true;
|
|
70
|
-
function onUpdate() {
|
|
71
|
-
if (ignore || reset === null) return;
|
|
72
|
-
ignore = true;
|
|
73
|
-
if (reset && unset) {
|
|
74
|
-
unset(true);
|
|
75
|
-
unset = void 0;
|
|
76
|
-
}
|
|
77
|
-
enqueue(invoke);
|
|
78
|
-
return { then: enqueue };
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
const exit = argument === false ? void 0 : scope();
|
|
82
|
-
const output = callback(target[Observable](onUpdate, argument === true));
|
|
83
|
-
const flush = exit ? exit() : () => {};
|
|
84
|
-
ignore = false;
|
|
85
|
-
reset = output === null ? null : invoke;
|
|
86
|
-
unset = (key) => {
|
|
87
|
-
if (typeof output == "function") output(key);
|
|
88
|
-
flush();
|
|
89
|
-
};
|
|
90
|
-
} catch (err) {
|
|
91
|
-
if (err instanceof Promise) {
|
|
92
|
-
reset = void 0;
|
|
93
|
-
err.then(invoke);
|
|
94
|
-
} else throw err;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function cleanup() {
|
|
98
|
-
if (unset) unset(false);
|
|
99
|
-
reset = null;
|
|
100
|
-
}
|
|
101
|
-
if (EffectContext && argument !== false) EffectContext.add(cleanup);
|
|
102
|
-
addListener(target, (key) => {
|
|
103
|
-
if (key === true) invoke();
|
|
104
|
-
else if (!reset) return reset;
|
|
105
|
-
if (key === null && unset) unset(null);
|
|
106
|
-
});
|
|
107
|
-
return cleanup;
|
|
108
|
-
}
|
|
109
|
-
let EffectContext;
|
|
110
|
-
function scope() {
|
|
111
|
-
const last = EffectContext;
|
|
112
|
-
const context = EffectContext = /* @__PURE__ */ new Set();
|
|
113
|
-
return () => {
|
|
114
|
-
EffectContext = last;
|
|
115
|
-
return () => context.forEach((fn) => fn());
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
//#endregion
|
|
120
|
-
export { Observable, PENDING_KEYS, addListener, event, scope, watch };
|
|
121
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb2JzZXJ2YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVwZGF0ZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5IC1cbiAqICAgLSBgc3RyaW5nYCAtIHByb3BlcnR5IHdoaWNoIGhhcyB1cGRhdGVkLlxuICogICAtIGBmYWxzZWAgLSBhIG5vcm1hbCB1cGRhdGUgaGFzIGNvbXBsZXRlZC5cbiAqICAgLSBgdHJ1ZWAgLSBpbml0aWFsIGV2ZW50OyBpbnN0YW5jZSBpcyByZWFkeS5cbiAqICAgLSBgbnVsbGAgLSB0ZXJtaW5hbCBldmVudDsgaW5zdGFuY2UgaXMgZXhwaXJlZC5cbiAqIEBwYXJhbSBzb3VyY2UgLSBJbnN0YW5jZSBvZiBTdGF0ZSBmb3Igd2hpY2ggdXBkYXRlIGhhcyBvY2N1cmVkLlxuICovXG50eXBlIE5vdGlmeTxUIGV4dGVuZHMgT2JzZXJ2YWJsZSA9IGFueT4gPSAoXG4gIHRoaXM6IFQsXG4gIGtleTogRXZlbnQsXG4gIHNvdXJjZTogVFxuKSA9PiAoKCkgPT4gdm9pZCkgfCBudWxsIHwgdm9pZDtcblxudHlwZSBFZmZlY3Q8VCBleHRlbmRzIE9ic2VydmFibGU+ID0gKFxuICBwcm94eTogVFxuKSA9PiAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IG51bGwgfCB2b2lkO1xuXG50eXBlIEV2ZW50ID0gbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW4gfCBzeW1ib2w7XG5cbnR5cGUgUHJvbWlzZUxpdGU8VCA9IHZvaWQ+ID0geyB0aGVuOiAoY2FsbGJhY2s6ICgpID0+IFQpID0+IFQgfTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgT2JzZXJ2YWJsZSB7XG4gIGV4cG9ydCB0eXBlIENhbGxiYWNrID0gKCkgPT4gdm9pZCB8IFByb21pc2VMaXRlO1xufVxuXG5pbnRlcmZhY2UgT2JzZXJ2YWJsZSB7XG4gIFtPYnNlcnZhYmxlXShjYWxsYmFjazogT2JzZXJ2YWJsZS5DYWxsYmFjaywgcmVxdWlyZWQ/OiBib29sZWFuKTogdGhpcyB8IHZvaWQ7XG59XG5cbmNvbnN0IE9ic2VydmFibGUgPSBTeW1ib2woJ29ic2VydmUnKTtcblxuLyoqIFBsYWNlaG9sZGVyIGV2ZW50IGRldGVybWluZXMgaWYgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAqL1xuY29uc3Qgb25SZWFkeSA9ICgpID0+IG51bGw7XG5cbmNvbnN0IExJU1RFTkVSUyA9IG5ldyBXZWFrTWFwPFxuICBPYnNlcnZhYmxlLFxuICBNYXA8Tm90aWZ5LCBTZXQ8RXZlbnQ+IHwgdW5kZWZpbmVkPlxuPigpO1xuXG4vKiogRXZlbnRzIHBlbmRpbmcgZm9yIGEgZ2l2ZW4gb2JqZWN0LiAqL1xuY29uc3QgUEVORElORyA9IG5ldyBXZWFrTWFwPE9ic2VydmFibGUsIFNldDxFdmVudD4+KCk7XG5cbi8qKiBVcGRhdGUgcmVnaXN0ZXIuICovXG5jb25zdCBQRU5ESU5HX0tFWVMgPSBuZXcgV2Vha01hcDxPYnNlcnZhYmxlLCBTZXQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPj4oKTtcblxuLyoqIENlbnRyYWwgZXZlbnQgZGlzcGF0Y2guIEJ1bmNoZXMgYWxsIHVwZGF0ZXMgdG8gb2NjdXIgYXQgc2FtZSB0aW1lLiAqL1xuY29uc3QgRElTUEFUQ0ggPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG5cbmZ1bmN0aW9uIGFkZExpc3RlbmVyPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgc3ViamVjdDogVCxcbiAgY2FsbGJhY2s6IE5vdGlmeTxUPixcbiAgc2VsZWN0PzogRXZlbnQgfCBTZXQ8RXZlbnQ+XG4pIHtcbiAgbGV0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQoc3ViamVjdCkhO1xuXG4gIGlmICghbGlzdGVuZXJzKVxuICAgIExJU1RFTkVSUy5zZXQoc3ViamVjdCwgKGxpc3RlbmVycyA9IG5ldyBNYXAoW1tvblJlYWR5LCB1bmRlZmluZWRdXSkpKTtcblxuICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgIShzZWxlY3QgaW5zdGFuY2VvZiBTZXQpKVxuICAgIHNlbGVjdCA9IG5ldyBTZXQoW3NlbGVjdF0pO1xuXG4gIGlmICghbGlzdGVuZXJzLmhhcyhvblJlYWR5KSAmJiAhc2VsZWN0KSB7XG4gICAgY2FsbGJhY2suY2FsbChzdWJqZWN0LCB0cnVlLCBzdWJqZWN0KTtcbiAgfVxuXG4gIGxpc3RlbmVycy5zZXQoY2FsbGJhY2ssIHNlbGVjdCk7XG5cbiAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBlbWl0KHN0YXRlOiBPYnNlcnZhYmxlLCBrZXk6IEV2ZW50KTogdm9pZCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQoc3RhdGUpITtcbiAgY29uc3Qgbm90UmVhZHkgPSBsaXN0ZW5lcnMuaGFzKG9uUmVhZHkpO1xuXG4gIGlmIChrZXkgPT09IHRydWUgJiYgIW5vdFJlYWR5KSByZXR1cm47XG5cbiAgbGV0IHBlbmRpbmcgPSBQRU5ESU5HLmdldChzdGF0ZSk7XG5cbiAgaWYgKHBlbmRpbmcpIHtcbiAgICBwZW5kaW5nLmFkZChrZXkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFBFTkRJTkcuc2V0KHN0YXRlLCAocGVuZGluZyA9IG5ldyBTZXQobm90UmVhZHkgPyBbdHJ1ZSwga2V5XSA6IFtrZXldKSkpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIHBlbmRpbmcpXG4gICAgZm9yIChjb25zdCBbY2FsbGJhY2ssIGZpbHRlcl0gb2YgbGlzdGVuZXJzKVxuICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gY2FsbGJhY2suY2FsbChzdGF0ZSwga2V5LCBzdGF0ZSk7XG5cbiAgICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICAgZW5xdWV1ZShhZnRlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIGlmIChrZXkgPT09IG51bGwpIGxpc3RlbmVycy5jbGVhcigpO1xuXG4gIFBFTkRJTkcuZGVsZXRlKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gZXZlbnQoXG4gIHN1YmplY3Q6IE9ic2VydmFibGUsXG4gIGtleT86IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IG51bGwsXG4gIHNpbGVudD86IGJvb2xlYW5cbikge1xuICBpZiAoa2V5ID09PSBudWxsKSByZXR1cm4gZW1pdChzdWJqZWN0LCBrZXkpO1xuXG4gIGlmICgha2V5KSByZXR1cm4gZW1pdChzdWJqZWN0LCB0cnVlKTtcblxuICBsZXQgcGVuZGluZyA9IFBFTkRJTkdfS0VZUy5nZXQoc3ViamVjdCk7XG5cbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgUEVORElOR19LRVlTLnNldChzdWJqZWN0LCAocGVuZGluZyA9IG5ldyBTZXQoKSkpO1xuXG4gICAgaWYgKCFzaWxlbnQpXG4gICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgZW1pdChzdWJqZWN0LCBmYWxzZSk7XG4gICAgICAgIFBFTkRJTkdfS0VZUy5kZWxldGUoc3ViamVjdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHBlbmRpbmcuYWRkKGtleSk7XG5cbiAgaWYgKCFzaWxlbnQpIGVtaXQoc3ViamVjdCwga2V5KTtcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZShldmVudEhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgaWYgKCFESVNQQVRDSC5zaXplKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgRElTUEFUQ0guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBldmVudCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRElTUEFUQ0guY2xlYXIoKTtcbiAgICB9LCAwKTtcblxuICBESVNQQVRDSC5hZGQoZXZlbnRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzaWRlLWVmZmVjdCB3aGljaCB3aWxsIHVwZGF0ZSB3aGVuZXZlciB2YWx1ZXMgYWNjZXNzZWQgY2hhbmdlLlxuICogQ2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFuZCB3aGVuZXZlciB2YWx1ZXMgYXJlIHN0YWxlLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBJbnN0YW5jZSBvZiBTdGF0ZSB0byBvYnNlcnZlLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdmFsdWVzIGNoYW5nZS5cbiAqIEBwYXJhbSByZXF1aXJlVmFsdWVzIC0gSWYgYHRydWVgIHdpbGwgdGhyb3cgaWYgYWNjZXNzaW5nIGEgdmFsdWUgd2hpY2ggaXMgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIHdhdGNoPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgdGFyZ2V0OiBULFxuICBjYWxsYmFjazogRWZmZWN0PFJlcXVpcmVkPFQ+PixcbiAgcmVxdWlyZVZhbHVlczogdHJ1ZVxuKTogKCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gd2F0Y2g8VCBleHRlbmRzIE9ic2VydmFibGU+KFxuICB0YXJnZXQ6IFQsXG4gIGNhbGxiYWNrOiBFZmZlY3Q8VD4sXG4gIHJlY3Vyc2l2ZT86IGJvb2xlYW5cbik6ICgpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHdhdGNoPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgdGFyZ2V0OiBULFxuICBjYWxsYmFjazogRWZmZWN0PFQ+LFxuICBhcmd1bWVudD86IGJvb2xlYW5cbikge1xuICBsZXQgdW5zZXQ6ICgodXBkYXRlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNldDogKCgpID0+IHZvaWQpIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBpbnZva2UoKSB7XG4gICAgbGV0IGlnbm9yZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmdW5jdGlvbiBvblVwZGF0ZSgpOiB2b2lkIHwgUHJvbWlzZUxpdGU8dm9pZD4ge1xuICAgICAgaWYgKGlnbm9yZSB8fCByZXNldCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBpZ25vcmUgPSB0cnVlO1xuXG4gICAgICBpZiAocmVzZXQgJiYgdW5zZXQpIHtcbiAgICAgICAgdW5zZXQodHJ1ZSk7XG4gICAgICAgIHVuc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBlbnF1ZXVlKGludm9rZSk7XG4gICAgICByZXR1cm4geyB0aGVuOiBlbnF1ZXVlIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXQgPSBhcmd1bWVudCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBzY29wZSgpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gY2FsbGJhY2soXG4gICAgICAgIHRhcmdldFtPYnNlcnZhYmxlXShvblVwZGF0ZSwgYXJndW1lbnQgPT09IHRydWUpIGFzIFRcbiAgICAgICk7XG4gICAgICBjb25zdCBmbHVzaCA9IGV4aXQgPyBleGl0KCkgOiAoKSA9PiB7fTtcblxuICAgICAgaWdub3JlID0gZmFsc2U7XG4gICAgICByZXNldCA9IG91dHB1dCA9PT0gbnVsbCA/IG51bGwgOiBpbnZva2U7XG4gICAgICB1bnNldCA9IChrZXkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT0gJ2Z1bmN0aW9uJykgb3V0cHV0KGtleSk7XG5cbiAgICAgICAgZmx1c2goKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXNldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZXJyLnRoZW4oaW52b2tlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGlmICh1bnNldCkgdW5zZXQoZmFsc2UpO1xuXG4gICAgcmVzZXQgPSBudWxsO1xuICB9XG5cbiAgaWYgKEVmZmVjdENvbnRleHQgJiYgYXJndW1lbnQgIT09IGZhbHNlKSBFZmZlY3RDb250ZXh0LmFkZChjbGVhbnVwKTtcblxuICBhZGRMaXN0ZW5lcih0YXJnZXQsIChrZXkpID0+IHtcbiAgICBpZiAoa2V5ID09PSB0cnVlKSBpbnZva2UoKTtcbiAgICBlbHNlIGlmICghcmVzZXQpIHJldHVybiByZXNldDtcblxuICAgIGlmIChrZXkgPT09IG51bGwgJiYgdW5zZXQpIHVuc2V0KG51bGwpO1xuICB9KTtcblxuICByZXR1cm4gY2xlYW51cDtcbn1cblxubGV0IEVmZmVjdENvbnRleHQ6IFNldDwoKSA9PiB2b2lkPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNjb3BlKCkge1xuICBjb25zdCBsYXN0ID0gRWZmZWN0Q29udGV4dDtcbiAgY29uc3QgY29udGV4dCA9IChFZmZlY3RDb250ZXh0ID0gbmV3IFNldCgpKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIEVmZmVjdENvbnRleHQgPSBsYXN0O1xuICAgIHJldHVybiAoKSA9PiBjb250ZXh0LmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWRkTGlzdGVuZXIsIHdhdGNoLCBldmVudCwgTm90aWZ5LCBQRU5ESU5HX0tFWVMsIE9ic2VydmFibGUgfTtcbiJdLCJtYXBwaW5ncyI6IjtBQWdDQSxNQUFNLGFBQWEsT0FBTyxVQUFVOztBQUdwQyxNQUFNLGdCQUFnQjtBQUV0QixNQUFNLDRCQUFZLElBQUksU0FHbkI7O0FBR0gsTUFBTSwwQkFBVSxJQUFJLFNBQWlDOztBQUdyRCxNQUFNLCtCQUFlLElBQUksU0FBb0Q7O0FBRzdFLE1BQU0sMkJBQVcsSUFBSSxLQUFpQjtBQUV0QyxT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
|