@expressive/mvc 0.57.0 → 0.57.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/context.js +2 -2
- package/dist/esm/instruction/has.js +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/esm/context.js
CHANGED
|
@@ -38,7 +38,7 @@ class Context {
|
|
|
38
38
|
}
|
|
39
39
|
/** Run callback when a specified type is registered to a **child** context. */
|
|
40
40
|
has(Type, callback) {
|
|
41
|
-
define(this, key(Type, true), { value: callback });
|
|
41
|
+
define(this, key(Type, true), { value: callback, configurable: true });
|
|
42
42
|
}
|
|
43
43
|
get(Type, require2) {
|
|
44
44
|
const result = this[key(Type)];
|
|
@@ -134,4 +134,4 @@ class Context {
|
|
|
134
134
|
export {
|
|
135
135
|
Context
|
|
136
136
|
};
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1vZGVsLCBQQVJFTlQsIGRlZmluZSwgdWlkIH0gZnJvbSAnLi9tb2RlbCc7XG5cbmNvbnN0IExPT0tVUCA9IG5ldyBXZWFrTWFwPE1vZGVsLCBDb250ZXh0IHwgKChnb3Q6IENvbnRleHQpID0+IHZvaWQpW10+KCk7XG5jb25zdCBLRVlTID0gbmV3IE1hcDxzeW1ib2wgfCBNb2RlbC5UeXBlLCBzeW1ib2w+KCk7XG5cbmZ1bmN0aW9uIGtleShUOiBNb2RlbC5UeXBlIHwgc3ltYm9sLCB1cHN0cmVhbT86IGJvb2xlYW4pOiBzeW1ib2wge1xuICBsZXQgSyA9IEtFWVMuZ2V0KFQpO1xuXG4gIGlmKCFLKVxuICAgIEtFWVMuc2V0KFQsIEsgPSBTeW1ib2woXG4gICAgICB0eXBlb2YgVCA9PSBcInN5bWJvbFwiID8gXCJnZXQgXCIgKyBULmRlc2NyaXB0aW9uIDogU3RyaW5nKFQpXG4gICAgKSk7XG4gIFxuICByZXR1cm4gdXBzdHJlYW0gPyBrZXkoSykgOiBLO1xufVxuXG5mdW5jdGlvbiBrZXlzKGZyb206IE1vZGVsLlR5cGUsIHVwc3RyZWFtPzogYm9vbGVhbil7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN5bWJvbD4oKTtcblxuICBkbyB7XG4gICAga2V5cy5hZGQoa2V5KGZyb20sIHVwc3RyZWFtKSk7XG4gIH1cbiAgd2hpbGUoKGZyb20gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJvbSkpICE9PSBNb2RlbCk7XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmRlY2xhcmUgbmFtZXNwYWNlIENvbnRleHQge1xuICB0eXBlIE11bHRpcGxlPFQgZXh0ZW5kcyBNb2RlbD4gPSB7XG4gICAgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogTW9kZWwuSW5pdDxUPiB8IFQ7XG4gIH07XG5cbiAgdHlwZSBBY2NlcHQ8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gVCB8IE1vZGVsLkluaXQ8VD4gfCBNdWx0aXBsZTxUPjtcblxuICB0eXBlIEV4cGVjdDxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPSAobW9kZWw6IFQpID0+ICgoKSA9PiB2b2lkKSB8IHZvaWQ7XG59XG5cbmludGVyZmFjZSBDb250ZXh0IHtcbiAgW2tleTogc3ltYm9sXTogTW9kZWwgfCBDb250ZXh0LkV4cGVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbmNsYXNzIENvbnRleHQge1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4ob246IE1vZGVsLCBjYWxsYmFjazogKChnb3Q6IENvbnRleHQpID0+IHZvaWQpKTogdm9pZDtcbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KG9uOiBNb2RlbCk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG4gIHN0YXRpYyBnZXQoZnJvbTogTW9kZWwsIGNhbGxiYWNrPzogKGdvdDogQ29udGV4dCkgPT4gdm9pZCl7XG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoZnJvbSk7XG5cbiAgICBpZih3YWl0aW5nIGluc3RhbmNlb2YgQ29udGV4dCl7XG4gICAgICBpZihjYWxsYmFjaylcbiAgICAgICAgY2FsbGJhY2sod2FpdGluZyk7XG5cbiAgICAgIHJldHVybiB3YWl0aW5nO1xuICAgIH1cblxuICAgIGlmKGNhbGxiYWNrKVxuICAgICAgaWYod2FpdGluZykgXG4gICAgICAgIHdhaXRpbmcucHVzaChjYWxsYmFjayk7XG4gICAgICBlbHNlIFxuICAgICAgICBMT09LVVAuc2V0KGZyb20sIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBsYXllciA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNb2RlbCB8IE1vZGVsLlR5cGU+KCk7XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KXtcbiAgICBpZihpbnB1dHMpXG4gICAgICB0aGlzLmluY2x1ZGUoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgdG8gYSAqKmNoaWxkKiogY29udGV4dC4gKi9cbiAgcHVibGljIGhhczxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrOiAobW9kZWw6IFQpID0+IHZvaWQpe1xuICAgIGRlZmluZSh0aGlzLCBrZXkoVHlwZSwgdHJ1ZSksIHsgdmFsdWU6IGNhbGxiYWNrIH0pO1xuICB9XG5cbiAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC4gKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIHJlcXVpcmU6IHRydWUpOiBUO1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4oVHlwZTogTW9kZWwuVHlwZTxUPiwgcmVxdWlyZT86IGJvb2xlYW4pOiBUIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4oVHlwZTogTW9kZWwuVHlwZTxUPiwgcmVxdWlyZT86IGJvb2xlYW4pe1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNba2V5KFR5cGUpXTtcblxuICAgIGlmKHJlc3VsdCA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIGZpbmQgJHtUeXBlfSBpbiBjb250ZXh0LCBidXQgbXVsdGlwbGUgd2VyZSBkZWZpbmVkLmApO1xuXG4gICAgaWYocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuXG4gICAgaWYocmVxdWlyZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgJHtUeXBlfSBpbiBjb250ZXh0LmApO1xuICB9XG5cbiAgcHVibGljIHB1c2goaW5wdXRzPzogQ29udGV4dC5BY2NlcHQpe1xuICAgIGNvbnN0IG5leHQgPSBPYmplY3QuY3JlYXRlKHRoaXMpIGFzIHRoaXM7XG5cbiAgICBuZXh0LmxheWVyID0gbmV3IE1hcCgpO1xuICAgIG5leHQuY2xlYW51cCA9IG5ldyBTZXQoKTtcblxuICAgIGlmKGlucHV0cylcbiAgICAgIG5leHQuaW5jbHVkZShpbnB1dHMpO1xuXG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBwdWJsaWMgcG9wKCl7XG4gICAgZm9yKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRoaXMpKVxuICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSlba2V5XTtcblxuICAgIHRoaXMuY2xlYW51cC5mb3JFYWNoKGNiID0+IGNiKCkpO1xuICAgIHRoaXMubGF5ZXIuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbmNsdWRlPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaW5wdXRzOiBDb250ZXh0LkFjY2VwdDxUPixcbiAgICBmb3JFYWNoPzogQ29udGV4dC5FeHBlY3Q8VD5cbiAgKXtcbiAgICBjb25zdCBpbml0ID0gbmV3IE1hcDxNb2RlbCwgYm9vbGVhbj4oKTtcblxuICAgIGlmKHR5cGVvZiBpbnB1dHMgPT0gXCJmdW5jdGlvblwiIHx8IGlucHV0cyBpbnN0YW5jZW9mIE1vZGVsKVxuICAgICAgaW5wdXRzID0geyAwOiBpbnB1dHMgfTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW0ssIFZdOiBbc3RyaW5nLCBNb2RlbCB8IE1vZGVsLkluaXQ8TW9kZWw+XSkgPT4ge1xuICAgICAgaWYoTW9kZWwuaXMoVikgfHwgViBpbnN0YW5jZW9mIE1vZGVsKXtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5sYXllci5nZXQoSyk7XG4gIFxuICAgICAgICBpZighZXhpc3RzKXtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuYWRkKFYpO1xuICBcbiAgICAgICAgICB0aGlzLmxheWVyLnNldChLLCBWKVxuICAgICAgICAgIGluaXQuc2V0KGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb250ZXh0IG11c3QgZm9yY2UtcmVzZXQgYmVjYXVzZSBpbnB1dHMgYXJlIG5vIGxvbmdlciBzYWZlLlxuICAgICAgICBlbHNlIGlmKGV4aXN0cyAhPT0gVil7ICAgIFxuICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgICAgdGhpcy5pZCA9IHVpZCgpO1xuICAgICAgICAgIHRoaXMuaW5jbHVkZShpbnB1dHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb250ZXh0IG1heSBvbmx5IGluY2x1ZGUgaW5zdGFuY2Ugb3IgY2xhc3MgXFxgZXh0ZW5kcyBNb2RlbFxcYCBidXQgZ290ICR7XG4gICAgICAgICAgSyA9PSAnMCcgfHwgSyA9PSBWID8gViA6IGAke1Z9IChhcyAnJHtLfScpYFxuICAgICAgICB9LmBcbiAgICAgICk7XG4gICAgfSlcblxuICAgIGZvcihjb25zdCBbbW9kZWwsIGV4cGxpY2l0XSBvZiBpbml0KXtcbiAgICAgIG1vZGVsLnNldCgpO1xuXG4gICAgICBpZihleHBsaWNpdCAmJiBmb3JFYWNoKVxuICAgICAgICAgIGZvckVhY2gobW9kZWwgYXMgVCk7XG5cbiAgICAgIGZvcihjb25zdCBbX2tleSwgdmFsdWVdIG9mIG1vZGVsKVxuICAgICAgICBpZihQQVJFTlQuZ2V0KHZhbHVlIGFzIE1vZGVsKSA9PT0gbW9kZWwpe1xuICAgICAgICAgIHRoaXMuYWRkKHZhbHVlIGFzIE1vZGVsLCB0cnVlKTtcbiAgICAgICAgICBpbml0LnNldCh2YWx1ZSBhcyBNb2RlbCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIGlucHV0OiBUIHwgTW9kZWwuSW5pdDxUPixcbiAgICBpbXBsaWNpdD86IGJvb2xlYW4pe1xuXG4gICAgbGV0IFQ6IE1vZGVsLlR5cGU8VD47XG4gICAgbGV0IEk6IFQ7XG5cbiAgICBpZih0eXBlb2YgaW5wdXQgPT0gXCJmdW5jdGlvblwiKXtcbiAgICAgIE1vZGVsLmlzKGlucHV0KTtcblxuICAgICAgVCA9IGlucHV0O1xuICAgICAgSSA9IG5ldyBpbnB1dCgpIGFzIFQ7XG4gICAgICB0aGlzLmNsZWFudXAuYWRkKCgpID0+IEkuc2V0KG51bGwpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBUID0gaW5wdXQuY29uc3RydWN0b3IgYXMgTW9kZWwuVHlwZTxUPjtcbiAgICAgIEkgPSBpbnB1dDtcbiAgICB9XG5cbiAgICBrZXlzKFQsIHRydWUpLmZvckVhY2goSyA9PiB7XG4gICAgICBjb25zdCBleHBlY3RzID0gdGhpc1tLXSBhcyBDb250ZXh0LkV4cGVjdCB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICBpZighZXhwZWN0cylcbiAgICAgICAgcmV0dXJuO1xuICBcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gZXhwZWN0cyhJKTtcbiAgICAgICAgXG4gICAgICBpZihjYWxsYmFjaylcbiAgICAgICAgdGhpcy5jbGVhbnVwLmFkZChjYWxsYmFjayk7XG4gICAgfSk7XG5cbiAgICBrZXlzKFQpLmZvckVhY2goSyA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFzT3duUHJvcGVydHkoSykgPyBudWxsIDogSTtcblxuICAgICAgaWYodmFsdWUgfHwgdGhpc1tLXSAhPT0gSSAmJiAhaW1wbGljaXQpXG4gICAgICAgIGRlZmluZSh0aGlzLCBLLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoSSk7XG4gIFxuICAgIGlmKHdhaXRpbmcgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIHdhaXRpbmcuZm9yRWFjaChjYiA9PiBjYih0aGlzKSk7XG5cbiAgICBMT09LVVAuc2V0KEksIHRoaXMpO1xuXG4gICAgcmV0dXJuIEk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ29udGV4dCB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxPQUFPLFFBQVEsUUFBUSxXQUFXO0FBRTNDLE1BQU0sU0FBUyxvQkFBSSxRQUFxRDtBQUN4RSxNQUFNLE9BQU8sb0JBQUksSUFBaUM7QUFFbEQsU0FBUyxJQUFJLEdBQXdCLFVBQTRCO0FBQy9ELE1BQUksSUFBSSxLQUFLLElBQUksQ0FBQztBQUVsQixNQUFHLENBQUM7QUFDRixTQUFLLElBQUksR0FBRyxJQUFJO0FBQUEsTUFDZCxPQUFPLEtBQUssV0FBVyxTQUFTLEVBQUUsY0FBYyxPQUFPLENBQUM7QUFBQSxJQUMxRCxDQUFDO0FBRUgsU0FBTyxXQUFXLElBQUksQ0FBQyxJQUFJO0FBQzdCO0FBRUEsU0FBUyxLQUFLLE1BQWtCLFVBQW1CO0FBQ2pELFFBQU1BLFFBQU8sb0JBQUksSUFBWTtBQUU3QixLQUFHO0FBQ0QsSUFBQUEsTUFBSyxJQUFJLElBQUksTUFBTSxRQUFRLENBQUM7QUFBQSxFQUM5QixVQUNPLE9BQU8sT0FBTyxlQUFlLElBQUksT0FBTztBQUUvQyxTQUFPQTtBQUNUO0FBZ0JBLE1BQU0sUUFBUTtBQUFBLEVBeUJaLFlBQVksUUFBd0I7QUFIcEMsU0FBVSxRQUFRLG9CQUFJLElBQXlDO0FBQy9ELFNBQVUsVUFBVSxvQkFBSSxJQUFnQjtBQUd0QyxRQUFHO0FBQ0QsV0FBSyxRQUFRLE1BQU07QUFBQSxFQUN2QjtBQUFBLEVBekJBLE9BQU8sSUFBSSxNQUFhLFVBQWtDO0FBQ3hELFVBQU0sVUFBVSxPQUFPLElBQUksSUFBSTtBQUUvQixRQUFHLG1CQUFtQixTQUFRO0FBQzVCLFVBQUc7QUFDRCxpQkFBUyxPQUFPO0FBRWxCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBRztBQUNELFVBQUc7QUFDRCxnQkFBUSxLQUFLLFFBQVE7QUFBQTtBQUVyQixlQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUFBLEVBQ2pDO0FBQUE7QUFBQSxFQWFPLElBQXFCLE1BQXFCLFVBQTZCO0FBQzVFLFdBQU8sTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxFQUNuRDtBQUFBLEVBS08sSUFBcUIsTUFBcUJDLFVBQWtCO0FBQ2pFLFVBQU0sU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDO0FBRTdCLFFBQUcsV0FBVztBQUNaLFlBQU0sSUFBSSxNQUFNLFlBQVksSUFBSSx5Q0FBeUM7QUFFM0UsUUFBRztBQUNELGFBQU87QUFFVCxRQUFHQTtBQUNELFlBQU0sSUFBSSxNQUFNLGtCQUFrQixJQUFJLGNBQWM7QUFBQSxFQUN4RDtBQUFBLEVBRU8sS0FBSyxRQUF3QjtBQUNsQyxVQUFNLE9BQU8sT0FBTyxPQUFPLElBQUk7QUFFL0IsU0FBSyxRQUFRLG9CQUFJLElBQUk7QUFDckIsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFFdkIsUUFBRztBQUNELFdBQUssUUFBUSxNQUFNO0FBRXJCLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFTyxNQUFLO0FBQ1YsZUFBVUMsUUFBTyxPQUFPLHNCQUFzQixJQUFJO0FBQ2hELGFBQVEsS0FBYUEsSUFBRztBQUUxQixTQUFLLFFBQVEsUUFBUSxRQUFNLEdBQUcsQ0FBQztBQUMvQixTQUFLLE1BQU0sTUFBTTtBQUFBLEVBQ25CO0FBQUEsRUFFTyxRQUNMLFFBQ0EsU0FDRDtBQUNDLFVBQU0sT0FBTyxvQkFBSSxJQUFvQjtBQUVyQyxRQUFHLE9BQU8sVUFBVSxjQUFjLGtCQUFrQjtBQUNsRCxlQUFTLEVBQUUsR0FBRyxPQUFPO0FBRXZCLFdBQU8sUUFBUSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQTJDO0FBQzlFLFVBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxhQUFhLE9BQU07QUFDbkMsY0FBTSxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUM7QUFFL0IsWUFBRyxDQUFDLFFBQU87QUFDVCxnQkFBTSxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRTNCLGVBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUNuQixlQUFLLElBQUksVUFBVSxJQUFJO0FBQUEsUUFDekIsV0FFUSxXQUFXLEdBQUU7QUFDbkIsZUFBSyxJQUFJO0FBQ1QsZUFBSyxLQUFLLElBQUk7QUFDZCxlQUFLLFFBQVEsTUFBTTtBQUFBLFFBQ3JCO0FBRUE7QUFBQSxNQUNGO0FBRUEsWUFBTSxJQUFJO0FBQUEsUUFDUix3RUFDRSxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUN6QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFFRCxlQUFVLENBQUMsT0FBTyxRQUFRLEtBQUssTUFBSztBQUNsQyxZQUFNLElBQUk7QUFFVixVQUFHLFlBQVk7QUFDWCxnQkFBUSxLQUFVO0FBRXRCLGlCQUFVLENBQUMsTUFBTSxLQUFLLEtBQUs7QUFDekIsWUFBRyxPQUFPLElBQUksS0FBYyxNQUFNLE9BQU07QUFDdEMsZUFBSyxJQUFJLE9BQWdCLElBQUk7QUFDN0IsZUFBSyxJQUFJLE9BQWdCLEtBQUs7QUFBQSxRQUNoQztBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQUEsRUFFVSxJQUNSLE9BQ0EsVUFBbUI7QUFFbkIsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFHLE9BQU8sU0FBUyxZQUFXO0FBQzVCLFlBQU0sR0FBRyxLQUFLO0FBRWQsVUFBSTtBQUNKLFVBQUksSUFBSSxNQUFNO0FBQ2QsV0FBSyxRQUFRLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDO0FBQUEsSUFDcEMsT0FDSztBQUNILFVBQUksTUFBTTtBQUNWLFVBQUk7QUFBQSxJQUNOO0FBRUEsU0FBSyxHQUFHLElBQUksRUFBRSxRQUFRLE9BQUs7QUFDekIsWUFBTSxVQUFVLEtBQUssQ0FBQztBQUV0QixVQUFHLENBQUM7QUFDRjtBQUVGLFlBQU0sV0FBVyxRQUFRLENBQUM7QUFFMUIsVUFBRztBQUNELGFBQUssUUFBUSxJQUFJLFFBQVE7QUFBQSxJQUM3QixDQUFDO0FBRUQsU0FBSyxDQUFDLEVBQUUsUUFBUSxPQUFLO0FBQ25CLFlBQU0sUUFBUSxLQUFLLGVBQWUsQ0FBQyxJQUFJLE9BQU87QUFFOUMsVUFBRyxTQUFTLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUM1QixlQUFPLE1BQU0sR0FBRztBQUFBLFVBQ2QsY0FBYztBQUFBLFVBQ2Q7QUFBQSxRQUNGLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxVQUFNLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFFNUIsUUFBRyxtQkFBbUI7QUFDcEIsY0FBUSxRQUFRLFFBQU0sR0FBRyxJQUFJLENBQUM7QUFFaEMsV0FBTyxJQUFJLEdBQUcsSUFBSTtBQUVsQixXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJrZXlzIiwgInJlcXVpcmUiLCAia2V5Il0KfQo=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1vZGVsLCBQQVJFTlQsIGRlZmluZSwgdWlkIH0gZnJvbSAnLi9tb2RlbCc7XG5cbmNvbnN0IExPT0tVUCA9IG5ldyBXZWFrTWFwPE1vZGVsLCBDb250ZXh0IHwgKChnb3Q6IENvbnRleHQpID0+IHZvaWQpW10+KCk7XG5jb25zdCBLRVlTID0gbmV3IE1hcDxzeW1ib2wgfCBNb2RlbC5UeXBlLCBzeW1ib2w+KCk7XG5cbmZ1bmN0aW9uIGtleShUOiBNb2RlbC5UeXBlIHwgc3ltYm9sLCB1cHN0cmVhbT86IGJvb2xlYW4pOiBzeW1ib2wge1xuICBsZXQgSyA9IEtFWVMuZ2V0KFQpO1xuXG4gIGlmKCFLKVxuICAgIEtFWVMuc2V0KFQsIEsgPSBTeW1ib2woXG4gICAgICB0eXBlb2YgVCA9PSBcInN5bWJvbFwiID8gXCJnZXQgXCIgKyBULmRlc2NyaXB0aW9uIDogU3RyaW5nKFQpXG4gICAgKSk7XG4gIFxuICByZXR1cm4gdXBzdHJlYW0gPyBrZXkoSykgOiBLO1xufVxuXG5mdW5jdGlvbiBrZXlzKGZyb206IE1vZGVsLlR5cGUsIHVwc3RyZWFtPzogYm9vbGVhbil7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN5bWJvbD4oKTtcblxuICBkbyB7XG4gICAga2V5cy5hZGQoa2V5KGZyb20sIHVwc3RyZWFtKSk7XG4gIH1cbiAgd2hpbGUoKGZyb20gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZnJvbSkpICE9PSBNb2RlbCk7XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmRlY2xhcmUgbmFtZXNwYWNlIENvbnRleHQge1xuICB0eXBlIE11bHRpcGxlPFQgZXh0ZW5kcyBNb2RlbD4gPSB7XG4gICAgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogTW9kZWwuSW5pdDxUPiB8IFQ7XG4gIH07XG5cbiAgdHlwZSBBY2NlcHQ8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gVCB8IE1vZGVsLkluaXQ8VD4gfCBNdWx0aXBsZTxUPjtcblxuICB0eXBlIEV4cGVjdDxUIGV4dGVuZHMgTW9kZWwgPSBNb2RlbD4gPSAobW9kZWw6IFQpID0+ICgoKSA9PiB2b2lkKSB8IHZvaWQ7XG59XG5cbmludGVyZmFjZSBDb250ZXh0IHtcbiAgW2tleTogc3ltYm9sXTogTW9kZWwgfCBDb250ZXh0LkV4cGVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG59XG5cbmNsYXNzIENvbnRleHQge1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4ob246IE1vZGVsLCBjYWxsYmFjazogKChnb3Q6IENvbnRleHQpID0+IHZvaWQpKTogdm9pZDtcbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KG9uOiBNb2RlbCk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG4gIHN0YXRpYyBnZXQoZnJvbTogTW9kZWwsIGNhbGxiYWNrPzogKGdvdDogQ29udGV4dCkgPT4gdm9pZCl7XG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoZnJvbSk7XG5cbiAgICBpZih3YWl0aW5nIGluc3RhbmNlb2YgQ29udGV4dCl7XG4gICAgICBpZihjYWxsYmFjaylcbiAgICAgICAgY2FsbGJhY2sod2FpdGluZyk7XG5cbiAgICAgIHJldHVybiB3YWl0aW5nO1xuICAgIH1cblxuICAgIGlmKGNhbGxiYWNrKVxuICAgICAgaWYod2FpdGluZykgXG4gICAgICAgIHdhaXRpbmcucHVzaChjYWxsYmFjayk7XG4gICAgICBlbHNlIFxuICAgICAgICBMT09LVVAuc2V0KGZyb20sIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBsYXllciA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNb2RlbCB8IE1vZGVsLlR5cGU+KCk7XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KXtcbiAgICBpZihpbnB1dHMpXG4gICAgICB0aGlzLmluY2x1ZGUoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgdG8gYSAqKmNoaWxkKiogY29udGV4dC4gKi9cbiAgcHVibGljIGhhczxUIGV4dGVuZHMgTW9kZWw+KFR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrOiAobW9kZWw6IFQpID0+IHZvaWQpe1xuICAgIGRlZmluZSh0aGlzLCBrZXkoVHlwZSwgdHJ1ZSksIHsgdmFsdWU6IGNhbGxiYWNrLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cblxuICAvKiogRmluZCBzcGVjaWZpZWQgdHlwZSByZWdpc3RlcmVkIHRvIGEgcGFyZW50IGNvbnRleHQuIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4oVHlwZTogTW9kZWwuVHlwZTxUPiwgcmVxdWlyZTogdHJ1ZSk6IFQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbik6IFQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIE1vZGVsPihUeXBlOiBNb2RlbC5UeXBlPFQ+LCByZXF1aXJlPzogYm9vbGVhbil7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpc1trZXkoVHlwZSldO1xuXG4gICAgaWYocmVzdWx0ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgZmluZCAke1R5cGV9IGluIGNvbnRleHQsIGJ1dCBtdWx0aXBsZSB3ZXJlIGRlZmluZWQuYCk7XG5cbiAgICBpZihyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG5cbiAgICBpZihyZXF1aXJlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1R5cGV9IGluIGNvbnRleHQuYCk7XG4gIH1cblxuICBwdWJsaWMgcHVzaChpbnB1dHM/OiBDb250ZXh0LkFjY2VwdCl7XG4gICAgY29uc3QgbmV4dCA9IE9iamVjdC5jcmVhdGUodGhpcykgYXMgdGhpcztcblxuICAgIG5leHQubGF5ZXIgPSBuZXcgTWFwKCk7XG4gICAgbmV4dC5jbGVhbnVwID0gbmV3IFNldCgpO1xuXG4gICAgaWYoaW5wdXRzKVxuICAgICAgbmV4dC5pbmNsdWRlKGlucHV0cyk7XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIHB1YmxpYyBwb3AoKXtcbiAgICBmb3IoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpXG4gICAgICBkZWxldGUgKHRoaXMgYXMgYW55KVtrZXldO1xuXG4gICAgdGhpcy5jbGVhbnVwLmZvckVhY2goY2IgPT4gY2IoKSk7XG4gICAgdGhpcy5sYXllci5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGluY2x1ZGU8VCBleHRlbmRzIE1vZGVsPihcbiAgICBpbnB1dHM6IENvbnRleHQuQWNjZXB0PFQ+LFxuICAgIGZvckVhY2g/OiBDb250ZXh0LkV4cGVjdDxUPlxuICApe1xuICAgIGNvbnN0IGluaXQgPSBuZXcgTWFwPE1vZGVsLCBib29sZWFuPigpO1xuXG4gICAgaWYodHlwZW9mIGlucHV0cyA9PSBcImZ1bmN0aW9uXCIgfHwgaW5wdXRzIGluc3RhbmNlb2YgTW9kZWwpXG4gICAgICBpbnB1dHMgPSB7IDA6IGlucHV0cyB9O1xuXG4gICAgT2JqZWN0LmVudHJpZXMoaW5wdXRzKS5mb3JFYWNoKChbSywgVl06IFtzdHJpbmcsIE1vZGVsIHwgTW9kZWwuSW5pdDxNb2RlbD5dKSA9PiB7XG4gICAgICBpZihNb2RlbC5pcyhWKSB8fCBWIGluc3RhbmNlb2YgTW9kZWwpe1xuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmxheWVyLmdldChLKTtcbiAgXG4gICAgICAgIGlmKCFleGlzdHMpe1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5hZGQoVik7XG4gIFxuICAgICAgICAgIHRoaXMubGF5ZXIuc2V0KEssIFYpXG4gICAgICAgICAgaW5pdC5zZXQoaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbnRleHQgbXVzdCBmb3JjZS1yZXNldCBiZWNhdXNlIGlucHV0cyBhcmUgbm8gbG9uZ2VyIHNhZmUuXG4gICAgICAgIGVsc2UgaWYoZXhpc3RzICE9PSBWKXsgICAgXG4gICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgICB0aGlzLmlkID0gdWlkKCk7XG4gICAgICAgICAgdGhpcy5pbmNsdWRlKGlucHV0cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbnRleHQgbWF5IG9ubHkgaW5jbHVkZSBpbnN0YW5jZSBvciBjbGFzcyBcXGBleHRlbmRzIE1vZGVsXFxgIGJ1dCBnb3QgJHtcbiAgICAgICAgICBLID09ICcwJyB8fCBLID09IFYgPyBWIDogYCR7Vn0gKGFzICcke0t9JylgXG4gICAgICAgIH0uYFxuICAgICAgKTtcbiAgICB9KVxuXG4gICAgZm9yKGNvbnN0IFttb2RlbCwgZXhwbGljaXRdIG9mIGluaXQpe1xuICAgICAgbW9kZWwuc2V0KCk7XG5cbiAgICAgIGlmKGV4cGxpY2l0ICYmIGZvckVhY2gpXG4gICAgICAgICAgZm9yRWFjaChtb2RlbCBhcyBUKTtcblxuICAgICAgZm9yKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2YgbW9kZWwpXG4gICAgICAgIGlmKFBBUkVOVC5nZXQodmFsdWUgYXMgTW9kZWwpID09PSBtb2RlbCl7XG4gICAgICAgICAgdGhpcy5hZGQodmFsdWUgYXMgTW9kZWwsIHRydWUpO1xuICAgICAgICAgIGluaXQuc2V0KHZhbHVlIGFzIE1vZGVsLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgaW5wdXQ6IFQgfCBNb2RlbC5Jbml0PFQ+LFxuICAgIGltcGxpY2l0PzogYm9vbGVhbil7XG5cbiAgICBsZXQgVDogTW9kZWwuVHlwZTxUPjtcbiAgICBsZXQgSTogVDtcblxuICAgIGlmKHR5cGVvZiBpbnB1dCA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgTW9kZWwuaXMoaW5wdXQpO1xuXG4gICAgICBUID0gaW5wdXQ7XG4gICAgICBJID0gbmV3IGlucHV0KCkgYXMgVDtcbiAgICAgIHRoaXMuY2xlYW51cC5hZGQoKCkgPT4gSS5zZXQobnVsbCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIFQgPSBpbnB1dC5jb25zdHJ1Y3RvciBhcyBNb2RlbC5UeXBlPFQ+O1xuICAgICAgSSA9IGlucHV0O1xuICAgIH1cblxuICAgIGtleXMoVCwgdHJ1ZSkuZm9yRWFjaChLID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdHMgPSB0aGlzW0tdIGFzIENvbnRleHQuRXhwZWN0IHwgdW5kZWZpbmVkO1xuICBcbiAgICAgIGlmKCFleHBlY3RzKVxuICAgICAgICByZXR1cm47XG4gIFxuICAgICAgY29uc3QgY2FsbGJhY2sgPSBleHBlY3RzKEkpO1xuICAgICAgICBcbiAgICAgIGlmKGNhbGxiYWNrKVxuICAgICAgICB0aGlzLmNsZWFudXAuYWRkKGNhbGxiYWNrKTtcbiAgICB9KTtcblxuICAgIGtleXMoVCkuZm9yRWFjaChLID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYXNPd25Qcm9wZXJ0eShLKSA/IG51bGwgOiBJO1xuXG4gICAgICBpZih2YWx1ZSB8fCB0aGlzW0tdICE9PSBJICYmICFpbXBsaWNpdClcbiAgICAgICAgZGVmaW5lKHRoaXMsIEssIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWl0aW5nID0gTE9PS1VQLmdldChJKTtcbiAgXG4gICAgaWYod2FpdGluZyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgd2FpdGluZy5mb3JFYWNoKGNiID0+IGNiKHRoaXMpKTtcblxuICAgIExPT0tVUC5zZXQoSSwgdGhpcyk7XG5cbiAgICByZXR1cm4gSTtcbiAgfVxufVxuXG5leHBvcnQgeyBDb250ZXh0IH0iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLE9BQU8sUUFBUSxRQUFRLFdBQVc7QUFFM0MsTUFBTSxTQUFTLG9CQUFJLFFBQXFEO0FBQ3hFLE1BQU0sT0FBTyxvQkFBSSxJQUFpQztBQUVsRCxTQUFTLElBQUksR0FBd0IsVUFBNEI7QUFDL0QsTUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO0FBRWxCLE1BQUcsQ0FBQztBQUNGLFNBQUssSUFBSSxHQUFHLElBQUk7QUFBQSxNQUNkLE9BQU8sS0FBSyxXQUFXLFNBQVMsRUFBRSxjQUFjLE9BQU8sQ0FBQztBQUFBLElBQzFELENBQUM7QUFFSCxTQUFPLFdBQVcsSUFBSSxDQUFDLElBQUk7QUFDN0I7QUFFQSxTQUFTLEtBQUssTUFBa0IsVUFBbUI7QUFDakQsUUFBTUEsUUFBTyxvQkFBSSxJQUFZO0FBRTdCLEtBQUc7QUFDRCxJQUFBQSxNQUFLLElBQUksSUFBSSxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQzlCLFVBQ08sT0FBTyxPQUFPLGVBQWUsSUFBSSxPQUFPO0FBRS9DLFNBQU9BO0FBQ1Q7QUFnQkEsTUFBTSxRQUFRO0FBQUEsRUF5QlosWUFBWSxRQUF3QjtBQUhwQyxTQUFVLFFBQVEsb0JBQUksSUFBeUM7QUFDL0QsU0FBVSxVQUFVLG9CQUFJLElBQWdCO0FBR3RDLFFBQUc7QUFDRCxXQUFLLFFBQVEsTUFBTTtBQUFBLEVBQ3ZCO0FBQUEsRUF6QkEsT0FBTyxJQUFJLE1BQWEsVUFBa0M7QUFDeEQsVUFBTSxVQUFVLE9BQU8sSUFBSSxJQUFJO0FBRS9CLFFBQUcsbUJBQW1CLFNBQVE7QUFDNUIsVUFBRztBQUNELGlCQUFTLE9BQU87QUFFbEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFHO0FBQ0QsVUFBRztBQUNELGdCQUFRLEtBQUssUUFBUTtBQUFBO0FBRXJCLGVBQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQUEsRUFDakM7QUFBQTtBQUFBLEVBYU8sSUFBcUIsTUFBcUIsVUFBNkI7QUFDNUUsV0FBTyxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLFVBQVUsY0FBYyxLQUFLLENBQUM7QUFBQSxFQUN2RTtBQUFBLEVBS08sSUFBcUIsTUFBcUJDLFVBQWtCO0FBQ2pFLFVBQU0sU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDO0FBRTdCLFFBQUcsV0FBVztBQUNaLFlBQU0sSUFBSSxNQUFNLFlBQVksSUFBSSx5Q0FBeUM7QUFFM0UsUUFBRztBQUNELGFBQU87QUFFVCxRQUFHQTtBQUNELFlBQU0sSUFBSSxNQUFNLGtCQUFrQixJQUFJLGNBQWM7QUFBQSxFQUN4RDtBQUFBLEVBRU8sS0FBSyxRQUF3QjtBQUNsQyxVQUFNLE9BQU8sT0FBTyxPQUFPLElBQUk7QUFFL0IsU0FBSyxRQUFRLG9CQUFJLElBQUk7QUFDckIsU0FBSyxVQUFVLG9CQUFJLElBQUk7QUFFdkIsUUFBRztBQUNELFdBQUssUUFBUSxNQUFNO0FBRXJCLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFTyxNQUFLO0FBQ1YsZUFBVUMsUUFBTyxPQUFPLHNCQUFzQixJQUFJO0FBQ2hELGFBQVEsS0FBYUEsSUFBRztBQUUxQixTQUFLLFFBQVEsUUFBUSxRQUFNLEdBQUcsQ0FBQztBQUMvQixTQUFLLE1BQU0sTUFBTTtBQUFBLEVBQ25CO0FBQUEsRUFFTyxRQUNMLFFBQ0EsU0FDRDtBQUNDLFVBQU0sT0FBTyxvQkFBSSxJQUFvQjtBQUVyQyxRQUFHLE9BQU8sVUFBVSxjQUFjLGtCQUFrQjtBQUNsRCxlQUFTLEVBQUUsR0FBRyxPQUFPO0FBRXZCLFdBQU8sUUFBUSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQTJDO0FBQzlFLFVBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxhQUFhLE9BQU07QUFDbkMsY0FBTSxTQUFTLEtBQUssTUFBTSxJQUFJLENBQUM7QUFFL0IsWUFBRyxDQUFDLFFBQU87QUFDVCxnQkFBTSxXQUFXLEtBQUssSUFBSSxDQUFDO0FBRTNCLGVBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUNuQixlQUFLLElBQUksVUFBVSxJQUFJO0FBQUEsUUFDekIsV0FFUSxXQUFXLEdBQUU7QUFDbkIsZUFBSyxJQUFJO0FBQ1QsZUFBSyxLQUFLLElBQUk7QUFDZCxlQUFLLFFBQVEsTUFBTTtBQUFBLFFBQ3JCO0FBRUE7QUFBQSxNQUNGO0FBRUEsWUFBTSxJQUFJO0FBQUEsUUFDUix3RUFDRSxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUN6QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFFRCxlQUFVLENBQUMsT0FBTyxRQUFRLEtBQUssTUFBSztBQUNsQyxZQUFNLElBQUk7QUFFVixVQUFHLFlBQVk7QUFDWCxnQkFBUSxLQUFVO0FBRXRCLGlCQUFVLENBQUMsTUFBTSxLQUFLLEtBQUs7QUFDekIsWUFBRyxPQUFPLElBQUksS0FBYyxNQUFNLE9BQU07QUFDdEMsZUFBSyxJQUFJLE9BQWdCLElBQUk7QUFDN0IsZUFBSyxJQUFJLE9BQWdCLEtBQUs7QUFBQSxRQUNoQztBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQUEsRUFFVSxJQUNSLE9BQ0EsVUFBbUI7QUFFbkIsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFHLE9BQU8sU0FBUyxZQUFXO0FBQzVCLFlBQU0sR0FBRyxLQUFLO0FBRWQsVUFBSTtBQUNKLFVBQUksSUFBSSxNQUFNO0FBQ2QsV0FBSyxRQUFRLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDO0FBQUEsSUFDcEMsT0FDSztBQUNILFVBQUksTUFBTTtBQUNWLFVBQUk7QUFBQSxJQUNOO0FBRUEsU0FBSyxHQUFHLElBQUksRUFBRSxRQUFRLE9BQUs7QUFDekIsWUFBTSxVQUFVLEtBQUssQ0FBQztBQUV0QixVQUFHLENBQUM7QUFDRjtBQUVGLFlBQU0sV0FBVyxRQUFRLENBQUM7QUFFMUIsVUFBRztBQUNELGFBQUssUUFBUSxJQUFJLFFBQVE7QUFBQSxJQUM3QixDQUFDO0FBRUQsU0FBSyxDQUFDLEVBQUUsUUFBUSxPQUFLO0FBQ25CLFlBQU0sUUFBUSxLQUFLLGVBQWUsQ0FBQyxJQUFJLE9BQU87QUFFOUMsVUFBRyxTQUFTLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUM1QixlQUFPLE1BQU0sR0FBRztBQUFBLFVBQ2QsY0FBYztBQUFBLFVBQ2Q7QUFBQSxRQUNGLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxVQUFNLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFFNUIsUUFBRyxtQkFBbUI7QUFDcEIsY0FBUSxRQUFRLFFBQU0sR0FBRyxJQUFJLENBQUM7QUFFaEMsV0FBTyxJQUFJLEdBQUcsSUFBSTtBQUVsQixXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJrZXlzIiwgInJlcXVpcmUiLCAia2V5Il0KfQo=
|
|
@@ -43,7 +43,7 @@ function has(arg1, arg2) {
|
|
|
43
43
|
if (typeof remove == "function")
|
|
44
44
|
remove();
|
|
45
45
|
};
|
|
46
|
-
const ignore = model.
|
|
46
|
+
const ignore = model.set(null, done);
|
|
47
47
|
return done;
|
|
48
48
|
});
|
|
49
49
|
});
|
|
@@ -73,4 +73,4 @@ function has(arg1, arg2) {
|
|
|
73
73
|
export {
|
|
74
74
|
has
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2hhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgTW9kZWwsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgQVBQTFkgPSBuZXcgV2Vha01hcDxNb2RlbCwgKG1vZGVsOiBNb2RlbCkgPT4gKCgpID0+IHZvaWQpIHwgYm9vbGVhbiB8IHZvaWQ+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIGhhcyB7XG4gIHR5cGUgQ2FsbGJhY2s8VCA9IGFueT4gPSAobW9kZWw6IFQsIHJlY2lwaWVudDogTW9kZWwpID0+IHZvaWQgfCBib29sZWFuIHwgKCgpID0+IHZvaWQpO1xufVxuXG5mdW5jdGlvbiBoYXMgPFQgZXh0ZW5kcyBNb2RlbD4gKHR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrPzogaGFzLkNhbGxiYWNrPFQ+KTogcmVhZG9ubHkgVFtdO1xuZnVuY3Rpb24gaGFzIChjYWxsYmFjaz86IGhhcy5DYWxsYmFjayk6IHJlYWRvbmx5IE1vZGVsW107XG4gIFxuZnVuY3Rpb24gaGFzIDxUIGV4dGVuZHMgTW9kZWw+IChcbiAgYXJnMT86IE1vZGVsLlR5cGU8VD4gfCBoYXMuQ2FsbGJhY2s8TW9kZWw+LFxuICBhcmcyPzogaGFzLkNhbGxiYWNrPFQ+KXtcblxuICByZXR1cm4gdXNlPFRbXT4oKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGNvbnN0IGFwcGxpZWQgPSBuZXcgU2V0PE1vZGVsPigpO1xuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGFwcGxpZWQpKSk7XG4gICAgfVxuXG4gICAgaWYoTW9kZWwuaXMoYXJnMSkpXG4gICAgICBDb250ZXh0LmdldChzdWJqZWN0LCBjb250ZXh0ID0+IHtcbiAgICAgICAgY29udGV4dC5oYXMoYXJnMSwgbW9kZWwgPT4ge1xuICAgICAgICAgIGxldCByZW1vdmU6ICgoKSA9PiB2b2lkKSB8IHZvaWQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGRpc2Nvbm5lY3Q6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICAgICAgaWYoYXBwbGllZC5oYXMobW9kZWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gQVBQTFkuZ2V0KG1vZGVsKTtcbiAgXG4gICAgICAgICAgaWYoY2FsbGJhY2spe1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBjYWxsYmFjayhzdWJqZWN0KTtcbiAgXG4gICAgICAgICAgICBpZihhZnRlciA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgXG4gICAgICAgICAgICBpZih0eXBlb2YgYWZ0ZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICBkaXNjb25uZWN0ID0gYWZ0ZXI7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IGFyZzIobW9kZWwsIHN1YmplY3QpO1xuICBcbiAgICAgICAgICAgIGlmKGRvbmUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlbW92ZSA9ICgpID0+
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2hhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgTW9kZWwsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgQVBQTFkgPSBuZXcgV2Vha01hcDxNb2RlbCwgKG1vZGVsOiBNb2RlbCkgPT4gKCgpID0+IHZvaWQpIHwgYm9vbGVhbiB8IHZvaWQ+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIGhhcyB7XG4gIHR5cGUgQ2FsbGJhY2s8VCA9IGFueT4gPSAobW9kZWw6IFQsIHJlY2lwaWVudDogTW9kZWwpID0+IHZvaWQgfCBib29sZWFuIHwgKCgpID0+IHZvaWQpO1xufVxuXG5mdW5jdGlvbiBoYXMgPFQgZXh0ZW5kcyBNb2RlbD4gKHR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrPzogaGFzLkNhbGxiYWNrPFQ+KTogcmVhZG9ubHkgVFtdO1xuZnVuY3Rpb24gaGFzIChjYWxsYmFjaz86IGhhcy5DYWxsYmFjayk6IHJlYWRvbmx5IE1vZGVsW107XG4gIFxuZnVuY3Rpb24gaGFzIDxUIGV4dGVuZHMgTW9kZWw+IChcbiAgYXJnMT86IE1vZGVsLlR5cGU8VD4gfCBoYXMuQ2FsbGJhY2s8TW9kZWw+LFxuICBhcmcyPzogaGFzLkNhbGxiYWNrPFQ+KXtcblxuICByZXR1cm4gdXNlPFRbXT4oKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGNvbnN0IGFwcGxpZWQgPSBuZXcgU2V0PE1vZGVsPigpO1xuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGFwcGxpZWQpKSk7XG4gICAgfVxuXG4gICAgaWYoTW9kZWwuaXMoYXJnMSkpXG4gICAgICBDb250ZXh0LmdldChzdWJqZWN0LCBjb250ZXh0ID0+IHtcbiAgICAgICAgY29udGV4dC5oYXMoYXJnMSwgbW9kZWwgPT4ge1xuICAgICAgICAgIGxldCByZW1vdmU6ICgoKSA9PiB2b2lkKSB8IHZvaWQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGRpc2Nvbm5lY3Q6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICAgICAgaWYoYXBwbGllZC5oYXMobW9kZWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gQVBQTFkuZ2V0KG1vZGVsKTtcbiAgXG4gICAgICAgICAgaWYoY2FsbGJhY2spe1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBjYWxsYmFjayhzdWJqZWN0KTtcbiAgXG4gICAgICAgICAgICBpZihhZnRlciA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgXG4gICAgICAgICAgICBpZih0eXBlb2YgYWZ0ZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICBkaXNjb25uZWN0ID0gYWZ0ZXI7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IGFyZzIobW9kZWwsIHN1YmplY3QpO1xuICBcbiAgICAgICAgICAgIGlmKGRvbmUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlbW92ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYodHlwZW9mIGRvbmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGFwcGxpZWQuYWRkKG1vZGVsKTtcbiAgICAgICAgICBhcHBseSgpO1xuICBcbiAgICAgICAgICBjb25zdCBkb25lID0gKCkgPT4geyBcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICBcbiAgICAgICAgICAgIGFwcGxpZWQuZGVsZXRlKG1vZGVsKTtcbiAgICAgICAgICAgIGFwcGx5KCk7XG4gIFxuICAgICAgICAgICAgaWYoZGlzY29ubmVjdClcbiAgICAgICAgICAgICAgZGlzY29ubmVjdCgpO1xuICBcbiAgICAgICAgICAgIGlmKHR5cGVvZiByZW1vdmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGNvbnN0IGlnbm9yZSA9IG1vZGVsLnNldChudWxsLCBkb25lKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIGVsc2Uge1xuICAgICAgaWYoQVBQTFkuaGFzKHN1YmplY3QpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdoYXMnIGNhbGxiYWNrIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBwZXIgbW9kZWwuYCk7XG5cbiAgICAgIEFQUExZLnNldChzdWJqZWN0LCByZWNpcGllbnQgPT4ge1xuICAgICAgICBsZXQgcmVtb3ZlOiAoKCkgPT4gdm9pZCkgfCBib29sZWFuIHwgdm9pZDtcblxuICAgICAgICBpZihhcmcxKXtcbiAgICAgICAgICByZW1vdmUgPSBhcmcxKHJlY2lwaWVudCwgc3ViamVjdCk7XG4gIFxuICAgICAgICAgIGlmKHJlbW92ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBsaWVkLmFkZChyZWNpcGllbnQpO1xuICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgYXBwbGllZC5kZWxldGUocmVjaXBpZW50KTtcbiAgICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgICAgaWYodHlwZW9mIHJlbW92ZSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsdWU6IFtdIH07XG4gIH0pXG59XG5cbmV4cG9ydCB7IGhhcyB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsT0FBTyxjQUFjO0FBQzlCLFNBQVMsV0FBVztBQUVwQixNQUFNLFFBQVEsb0JBQUksUUFBZ0U7QUFTbEYsU0FBUyxJQUNQLE1BQ0EsTUFBdUI7QUFFdkIsU0FBTyxJQUFTLENBQUMsS0FBSyxZQUFZO0FBQ2hDLFVBQU0sVUFBVSxvQkFBSSxJQUFXO0FBQy9CLFVBQU0sUUFBUSxNQUFNO0FBQ2xCLGFBQU8sU0FBUyxLQUFLLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUM7QUFBQSxJQUN6RDtBQUVBLFFBQUcsTUFBTSxHQUFHLElBQUk7QUFDZCxjQUFRLElBQUksU0FBUyxhQUFXO0FBQzlCLGdCQUFRLElBQUksTUFBTSxXQUFTO0FBQ3pCLGNBQUk7QUFDSixjQUFJO0FBRUosY0FBRyxRQUFRLElBQUksS0FBSztBQUNsQjtBQUVGLGdCQUFNLFdBQVcsTUFBTSxJQUFJLEtBQUs7QUFFaEMsY0FBRyxVQUFTO0FBQ1Ysa0JBQU0sUUFBUSxTQUFTLE9BQU87QUFFOUIsZ0JBQUcsVUFBVTtBQUNYO0FBRUYsZ0JBQUcsT0FBTyxTQUFTO0FBQ2pCLDJCQUFhO0FBQUEsVUFDakI7QUFFQSxjQUFHLE9BQU8sUUFBUSxZQUFXO0FBQzNCLGtCQUFNQSxRQUFPLEtBQUssT0FBTyxPQUFPO0FBRWhDLGdCQUFHQSxVQUFTO0FBQ1YscUJBQU87QUFFVCxxQkFBUyxNQUFNO0FBQ2Isa0JBQUcsT0FBT0EsU0FBUTtBQUNoQixnQkFBQUEsTUFBSztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsa0JBQVEsSUFBSSxLQUFLO0FBQ2pCLGdCQUFNO0FBRU4sZ0JBQU0sT0FBTyxNQUFNO0FBQ2pCLG1CQUFPO0FBRVAsb0JBQVEsT0FBTyxLQUFLO0FBQ3BCLGtCQUFNO0FBRU4sZ0JBQUc7QUFDRCx5QkFBVztBQUViLGdCQUFHLE9BQU8sVUFBVTtBQUNsQixxQkFBTztBQUFBLFVBQ1g7QUFFQSxnQkFBTSxTQUFTLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFFbkMsaUJBQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxTQUNFO0FBQ0gsVUFBRyxNQUFNLElBQUksT0FBTztBQUNsQixjQUFNLElBQUksTUFBTSxpREFBaUQ7QUFFbkUsWUFBTSxJQUFJLFNBQVMsZUFBYTtBQUM5QixZQUFJO0FBRUosWUFBRyxNQUFLO0FBQ04sbUJBQVMsS0FBSyxXQUFXLE9BQU87QUFFaEMsY0FBRyxXQUFXO0FBQ1osbUJBQU87QUFBQSxRQUNYO0FBRUEsZ0JBQVEsSUFBSSxTQUFTO0FBQ3JCLGNBQU07QUFFTixlQUFPLE1BQU07QUFDWCxrQkFBUSxPQUFPLFNBQVM7QUFDeEIsZ0JBQU07QUFFTixjQUFHLE9BQU8sVUFBVTtBQUNsQixtQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQUEsRUFDckIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJkb25lIl0KfQo=
|
package/dist/index.js
CHANGED
|
@@ -521,7 +521,7 @@ var Context = class _Context {
|
|
|
521
521
|
}
|
|
522
522
|
/** Run callback when a specified type is registered to a **child** context. */
|
|
523
523
|
has(Type, callback) {
|
|
524
|
-
define(this, key(Type, true), { value: callback });
|
|
524
|
+
define(this, key(Type, true), { value: callback, configurable: true });
|
|
525
525
|
}
|
|
526
526
|
get(Type, require2) {
|
|
527
527
|
const result = this[key(Type)];
|
|
@@ -935,7 +935,7 @@ function has(arg1, arg2) {
|
|
|
935
935
|
if (typeof remove == "function")
|
|
936
936
|
remove();
|
|
937
937
|
};
|
|
938
|
-
const ignore = model.
|
|
938
|
+
const ignore = model.set(null, done);
|
|
939
939
|
return done;
|
|
940
940
|
});
|
|
941
941
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/control.ts","../src/model.ts","../src/context.ts","../src/instruction/use.ts","../src/instruction/get.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/has.ts"],"sourcesContent":["export { get } from './instruction/get';\nexport { ref } from './instruction/ref';\nexport { set } from './instruction/set';\nexport { use } from './instruction/use';\nexport { has } from './instruction/has';\n\nexport { Model, Model as default } from './model';\nexport { createEffect, createProxy, addListener } from './control';\nexport { Context } from './context';","import type { Model } from \"./model\";\n\n/**\n * Update callback function.\n * \n * @param key -\n * - `string` - property which has updated.\n * - `false` - a normal update has completed.\n * - `true` - initial event; instance is ready.\n * - `null` - terminal event; instance is expired.\n * @param source - Instance of Model for which update has occured.\n */\ntype OnUpdate<T extends Model = any> = \n (this: T, key: unknown, source: T) => (() => void) | null | void;\n\ntype OnAccess<T extends Model = any, R = unknown> =\n (from: T, key: string | number, value: R) => unknown;\n\ntype Effect<T extends Model> = (this: T, proxy: T) =>\n ((update: boolean | null) => void) | Promise<void> | null | void;\n\ntype Event = number | string | null | boolean | symbol;\n\n/** Placeholder event determines if model is initialized or not. */\nconst onReady = () => null;\n\nconst LISTENERS = new WeakMap<Model, Map<OnUpdate, Set<Event> | undefined>>();\n\n/** Events pending for a given object. */\nconst PENDING = new WeakMap<Model, Set<Event>>();\n\n/** Update register. */\nconst PENDING_KEYS = new WeakMap<Model, Set<string | number | symbol>>();\n\n/** Central event dispatch. Bunches all updates to occur at same time. */\nconst DISPATCH = new Set<() => void>();\n\nconst OBSERVER = new WeakMap<Model, OnAccess>();\n\nfunction addListener<T extends Model>(subject: T, callback: OnUpdate<T>, select?: Event){\n let listeners = LISTENERS.get(subject)!;\n\n if(!listeners)\n LISTENERS.set(subject, listeners = new Map([[onReady, undefined]]));\n\n const filter = select === undefined ? undefined : new Set([select]);\n\n if(!listeners.has(onReady) && !filter)\n callback.call(subject, true, subject);\n\n listeners.set(callback, filter);\n\n return () => listeners.delete(callback);\n}\n\nfunction emit(model: Model, key: Event): void {\n const listeners = LISTENERS.get(model)!;\n const notReady = listeners.has(onReady);\n\n if(key === true && !notReady)\n return;\n\n let pending = PENDING.get(model);\n\n if(pending){\n pending.add(key);\n return;\n }\n\n PENDING.set(model, pending = new Set(notReady ? [true, key] : [key]));\n\n for(const key of pending)\n for(const [callback, filter] of listeners)\n if(!filter || filter.has(key)){\n const after = callback.call(model, key, model);\n\n if(after)\n enqueue(after);\n\n else if(after === null)\n listeners.delete(callback);\n }\n\n if(key === null)\n listeners.clear();\n \n PENDING.delete(model);\n}\n\nfunction event(\n subject: Model,\n key?: string | number | symbol | null,\n silent?: boolean){\n\n if(key === null)\n return emit(subject, key);\n\n if(!key)\n return emit(subject, true);\n\n let pending = PENDING_KEYS.get(subject);\n\n if(!pending){\n PENDING_KEYS.set(subject, pending = new Set());\n\n if(!silent)\n enqueue(() => {\n emit(subject, false);\n PENDING_KEYS.delete(subject)\n })\n }\n\n pending.add(key);\n\n if(!silent)\n emit(subject, key);\n}\n\nfunction pending<T extends Model>(subject: T){\n if(PENDING_KEYS.has(subject))\n return <PromiseLike<Model.Event<T>[]>> {\n then: (res) => new Promise<any>(res => {\n const remove = addListener(subject, key => {\n if(key !== true){\n remove();\n return res.bind(null, Array.from(PENDING_KEYS.get(subject)!));\n }\n });\n }).then(res)\n }\n}\n\nfunction enqueue(eventHandler: (() => void)){\n if(!DISPATCH.size)\n setTimeout(() => {\n DISPATCH.forEach(event => {\n try {\n event();\n }\n catch(err){\n console.error(err);\n }\n });\n DISPATCH.clear();\n }, 0);\n\n DISPATCH.add(eventHandler);\n}\n\nfunction createProxy<T extends Model>(from: T, observer: OnAccess<T>){\n const proxy = Object.create(from) as T;\n OBSERVER.set(proxy, observer);\n return proxy;\n}\n\nfunction watch(from: any, key: string | number, value?: any){\n const access = OBSERVER.get(from);\n return access ? access(from, key, value) : value;\n}\n\n/**\n * Create a side-effect which will update whenever values accessed change.\n * Callback is called immediately and whenever values are stale.\n * \n * @param target - Instance of Model to observe.\n * @param callback - Function to invoke when values change.\n * @param requireValues - If `true` will throw if accessing a value which is `undefined`.\n */\nfunction createEffect<T extends Model>(target: T, callback: Effect<Required<T>>, requireValues: true): () => void;\nfunction createEffect<T extends Model>(target: T, callback: Effect<T>, recursive?: boolean): () => void;\nfunction createEffect<T extends Model>(target: T, callback: Effect<T>, argument?: boolean){\n const listeners = LISTENERS.get(target)!;\n\n let unset: ((update: boolean | null) => void) | undefined;\n let reset: (() => void) | null | undefined;\n\n function invoke(){\n let stale: boolean | undefined;\n\n const subscriber = createProxy(target, access);\n\n LISTENERS.set(subscriber, listeners);\n\n function onUpdate() {\n if (stale)\n return null;\n\n stale = true;\n\n if (reset && unset) {\n unset(true);\n unset = undefined;\n }\n\n return reset;\n }\n\n function access(from: Model, key: string | number, value: any) {\n if(value === undefined && argument)\n throw new Error(`${from}.${key} is required in this context.`);\n\n const listeners = LISTENERS.get(from)!;\n let listener = listeners.get(onUpdate);\n\n if(!listener)\n listeners.set(onUpdate, listener = new Set);\n\n listener.add(key);\n\n const nested = LISTENERS.get(value);\n\n if(nested)\n LISTENERS.set(\n value = createProxy(value, access),\n nested\n );\n\n return value;\n }\n\n try {\n const ctx = context(argument === false)\n const ret = callback.call(subscriber, subscriber);\n const flush = ctx();\n\n reset = ret === null ? null : invoke;\n unset = key => {\n if(typeof ret == \"function\")\n ret(key);\n\n flush();\n }\n }\n catch(err){\n if(err instanceof Promise){\n reset = undefined;\n err.then(invoke);\n }\n else\n throw err;\n }\n }\n\n function cleanup(){\n if(unset)\n unset(false);\n\n reset = null;\n };\n\n if(EffectContext && argument !== false)\n EffectContext.add(cleanup);\n\n addListener(target, key => {\n if(key === true)\n invoke();\n\n else if(!reset)\n return reset;\n\n if(key === null && unset)\n unset(null);\n });\n \n return cleanup;\n}\n\nlet EffectContext: Set<() => void> | undefined;\n\nexport function context(ignore?: boolean){\n if(ignore)\n return () => () => {};\n\n const current = EffectContext;\n const ctx = EffectContext = new Set;\n\n return () => {\n EffectContext = current;\n \n return () => {\n ctx.forEach(fn => fn());\n }\n }\n}\n\nexport {\n addListener,\n createEffect,\n createProxy,\n event,\n OnUpdate,\n PENDING_KEYS,\n pending,\n watch\n}","import { addListener, createEffect, event, OnUpdate, pending, PENDING_KEYS, watch } from './control';\n\nexport const define = Object.defineProperty;\n\n/** Register for all active models via string identifiers (usually unique). */\nconst ID = new WeakMap<Model, string>();\n\n/** Internal state assigned to models. */\nconst STATE = new WeakMap<Model, Record<string | number | symbol, unknown>>();\n\n/** External listeners for any given Model. */\nconst NOTIFY = new WeakMap<Model.Type, Set<OnUpdate>>();\n\n/** Parent-child relationships. */\nconst PARENT = new WeakMap<Model, Model | null>();\n\n/** List of methods defined by a given type. */\nconst METHODS = new WeakMap<Model.Type, Set<string>>();\n\n/** Reference bound instance methods to real ones. */\nconst METHOD = new WeakMap<any, any>();\n\ndeclare namespace Model {\n /** Any type of Model, using own class constructor as its identifier. */\n type Type<T extends Model = Model> =\n (abstract new (...args: any[]) => T) & typeof Model;\n\n /** A Model constructor, but which is not abstract. */\n type Init<T extends Model = Model> =\n (new (...args: Model.Args<T>) => T) & Omit<typeof Model, never>;\n\n /**\n * Model constructor callback - is called when Model finishes intializing.\n * Returned function will run when model is destroyed.\n */\n type Callback<T extends Model = Model> =\n (this: T, thisArg: T) => Promise<void> | (() => void) | Assign<T> | void;\n\n /** Model constructor argument */\n type Argument<T extends Model = Model> = Assign<T> | Callback<T> | string | void;\n\n /** Model constructor arguments */\n type Args<T extends Model = any> = (Argument<T> | Args<T>)[];\n\n /** Subset of `keyof T` which are not methods or defined by base Model U. **/\n type Field<T> = Exclude<keyof T, keyof Model>;\n\n /** Any valid key for model, including but not limited to Field<T>. */\n type Event<T> = Field<T> | (string & {}) | number | symbol;\n\n /** Object overlay to override values and methods on a model. */\n type Assign<T> = {\n [K in Field<T>]?:\n T[K] extends (...args: infer A) => infer R \n ? (this: T, ...args: A) => R\n : T[K];\n } & Record<string, unknown>;\n\n /** Export/Import compatible value for a given property in a Model. */\n type Export<R> = R extends { get(): infer T } ? T : R;\n\n /** Value for a property managed by a model. */\n type Value<T extends Model, K extends Event<T>> =\n K extends keyof T ? Export<T[K]> : unknown;\n\n type OnEvent<T extends Model> =\n (this: T, key: unknown, source: T) => (() => void) | void | null;\n\n type OnUpdate<T extends Model, K extends Event<T>> =\n (this: T, key: K, thisArg: K) => void;\n\n /**\n * Values from current state of given model.\n * Differs from `Values` as values here will drill\n * into \"real\" values held by exotics like ref.Object.\n */\n type State<T> = { [P in Field<T>]: Export<T[P]> };\n\n /** Object comperable to data found in T. */\n type Values<T> = { [P in Field<T>]?: Export<T[P]> };\n\n /** Exotic value, where actual value is contained within. */\n type Ref<T = any> = {\n (next: T): void;\n current: T | null;\n }\n\n /**\n * A callback function which is subscribed to parent and updates when accessed properties change.\n * \n * @param current - Current state of this model. This is a proxy which detects properties which\n * where accessed, and thus depended upon to stay current.\n * \n * @param update - Set of properties which have changed, and events fired, since last update.\n * \n * @returns A callback function which will be called when this effect is stale.\n */\n type Effect<T> = (this: T, current: T, update: Set<Event<T>>) =>\n EffectCallback | Promise<void> | null | void;\n\n /**\n * A callback function returned by effect. Will be called when effect is stale.\n * \n * @param update - `true` if update is pending, `false` effect has been cancelled, `null` if model is destroyed.\n */\n type EffectCallback = ((update: boolean | null) => void);\n\n /**\n * Property initializer, will run upon instance creation.\n * Optional returned callback will run when once upon first access.\n */\n type Instruction<T = any, M extends Model = any> =\n // TODO: Should this allow for numbers/symbol properties?\n (this: M, key: Extract<Field<M>, string>, thisArg: M, state: State<M>) =>\n Descriptor<T> | ((source: M) => T) | void;\n\n type Getter<T> = (source: Model) => T;\n type Setter<T> = (value: T, previous: T) => boolean | void | (() => T);\n\n type Descriptor<T = any> = {\n get?: Getter<T> | boolean;\n set?: Setter<T> | boolean;\n enumerable?: boolean;\n value?: T;\n }\n}\n\ninterface Model {\n /**\n * Loopback to instance of this model. This is useful when in a subscribed context,\n * to keep write access to `this` after a destructure. You can use it to read variables silently as well.\n **/\n is: this;\n}\n\nabstract class Model {\n constructor(...args: Model.Args){\n prepare(this);\n define(this, \"is\", { value: this });\n init(this, args);\n }\n\n /**\n * Pull current values from state. Flattens all models and exotic values recursively.\n * \n * @returns Object with all values from this model.\n **/\n get(): Model.State<this>;\n\n /**\n * Run a function which will run automatically when accessed values change.\n * \n * @param effect Function to run, and again whenever accessed values change.\n * If effect returns a function, it will be called when a change occurs (syncronously),\n * effect is cancelled, or parent model is destroyed.\n * @returns Function to cancel listener.\n */\n get(effect: Model.Effect<this>): () => void;\n\n /**\n * Get value of a property.\n * \n * @param key - Property to get value of.\n * @param required - If true, will throw an error if property is not available.\n * @returns Value of property.\n */\n get<T extends Model.Event<this>>(key: T, required?: boolean): Model.Value<this, T>;\n\n /**\n * Run a function when a property is updated.\n * \n * @param key - Property to watch for updates.\n * @param callback - Function to call when property is updated.\n * @returns Function to cancel listener.\n */\n get<T extends Model.Event<this>>(key: T, callback: Model.OnUpdate<this, T>): () => void;\n\n /**\n * Check if model is expired.\n * \n * @param status - `null` to check if model is expired.\n * @returns `true` if model is expired, `false` otherwise.\n */\n get(status: null): boolean;\n\n /**\n * Callback when model is to be destroyed.\n * \n * @param callback - Function to call when model is destroyed.\n * @returns Function to cancel listener.\n */\n get(status: null, callback: () => void): () => void;\n\n get(arg1?: Model.Effect<this> | string | null, arg2?: boolean | Model.OnUpdate<this, any>){\n const self = this.is;\n\n if(typeof arg1 == \"function\"){\n let pending = new Set<Model.Event<this>>();\n\n return createEffect(self, (proxy) => {\n const cb = arg1.call(proxy, proxy, pending);\n\n return cb === null ? null : ((update) => {\n pending = PENDING_KEYS.get(self)!;\n if(typeof cb == \"function\")\n cb(update);\n })\n });\n }\n\n if(arg1 === undefined)\n return snapshot(self);\n\n if(typeof arg2 == \"function\")\n return addListener(self, arg2, arg1)\n\n return arg1 === null\n ? Object.isFrozen(STATE.get(self))\n : fetch(self, arg1, arg2);\n }\n\n /**\n * Get update in progress.\n *\n * @returns Promise which resolves object with updated values, `undefined` if there no update is pending.\n **/\n set(): PromiseLike<Model.Event<this>[]> | undefined;\n\n /**\n * Update mulitple properties at once. Merges argument with current state.\n * Properties which are not managed by this model will be ignored.\n * \n * @param assign - Object with properties to update.\n * @param silent - If an update does occur, listeners will not be refreshed automatically.\n * @returns Promise resolving an array of keys updated, `undefined` (immediately) if a noop.\n */\n set(assign: Model.Assign<this>, silent?: boolean): PromiseLike<Model.Event<this>[]> | undefined;\n\n /**\n * Push an update. This will not change the value of associated property.\n * \n * Useful where a property value internally has changed, but the object is the same.\n * For example: An array has pushed a new value, or a nested property is updated.\n * \n * You can also use this to dispatch arbitrary events.\n * Symbols are recommended as non-property events, however you can use any string.\n * If doing so, be sure to avoid collisions with property names! An easy way to do this is\n * to prefix an event with \"!\" and/or use dash-case. e.g. `set(\"!event\")` or `set(\"my-event\")`.\n * \n * @param key - Property or event to dispatch.\n * @returns Promise resolves an array of keys updated.\n */\n set(key: Model.Event<this>): PromiseLike<Model.Event<this>[]>;\n\n /**\n * Call a function when update occurs.\n * \n * Given function is called for every assignment (which changes value) or explicit `set`.\n * \n * To run logic on final value only, callback may return a function. Using the same\n * function for one or more events will ensure it is called only when events are settled.\n * \n * @param callback - Function to call when update occurs.\n * @returns Function to remove listener. Will return `true` if removed, `false` if inactive already.\n * \n */\n set(callback: Model.OnEvent<this>): () => boolean;\n\n /**\n * Call a function when a property is updated.\n * Unlike `get`, this calsl synchronously and will fire as many times as the property is updated.\n * \n * @param key - Property to watch for updates.\n * @param callback - Function to call when property is updated.\n */\n set(key: Model.Event<this> | null, callback: Model.OnEvent<this>): () => boolean;\n\n /**\n * Declare an end to updates. This event is final and will freeze state.\n * This event can be watched for as well, to run cleanup logic and internally will remove all listeners.\n * \n * @param status - `null` to end updates.\n */\n set(status: null): void;\n\n set(\n arg1?: Model.OnEvent<this> | Model.Assign<this> | Model.Event<this> | null,\n arg2?: boolean | Model.OnEvent<this>){\n\n const self = this.is;\n\n if(typeof arg1 == \"function\")\n return addListener(self, key => {\n if(typeof key == \"string\")\n return arg1.call(self, key, self);\n })\n \n if(typeof arg2 == \"function\")\n return addListener(self, key => {\n if(key === arg1)\n return arg2.call(self, key, self);\n });\n\n if(arg1 && typeof arg1 == \"object\"){\n const methods = METHODS.get(self.constructor as Model.Type)!;\n \n for(const key in arg1)\n if(methods.has(key))\n self[key as keyof this] = arg1[key] as any;\n else if(key in self)\n update(self, key, arg1[key], arg2 === true);\n }\n else\n event(self, arg1);\n\n return pending(self);\n }\n\n /**\n * Iterate over managed properties in this instance of Model.\n * Yeilds the key and current value for each property.\n */\n [Symbol.iterator](): Iterator<[string, unknown]> {\n return Object.entries(STATE.get(this.is)!)[Symbol.iterator]();\n }\n\n /**\n * Create and activate a new instance of this model.\n * \n * **Important** - Unlike `new this(...)` - this method also activates state.\n * \n * @param args - arguments sent to constructor\n */\n static new<T extends Model>(this: Model.Init<T>, ...args: Model.Args<T>){\n const instance = new this(...args);\n event(instance);\n return instance;\n }\n\n /**\n * Static equivalent of `x instanceof this`.\n * Determines if provided class is a subtype of this one.\n * If so, language server will make available all static\n * methods and properties of this class.\n */\n static is<T extends Model.Type>(this: T, maybe: unknown): maybe is T {\n return maybe === this || typeof maybe == \"function\" && maybe.prototype instanceof this;\n }\n\n /**\n * Register a callback to run when any instance of this Model is updated. \n */\n static on<T extends Model>(this: Model.Type<T>, listener: Model.OnEvent<T>){\n let notify = NOTIFY.get(this);\n\n if(!notify)\n NOTIFY.set(this, notify = new Set);\n\n notify.add(listener);\n\n return () => notify.delete(listener);\n }\n}\n\ndefine(Model.prototype, \"toString\", {\n value(){\n return ID.get(this.is);\n }\n});\n\ndefine(Model, \"toString\", {\n value(){\n return this.name;\n }\n});\n\n/** Apply instructions and inherited event listeners. Ensure class metadata is ready. */\nfunction prepare(model: Model){\n let T = model.constructor as Model.Type;\n\n if(T === Model)\n throw new Error(\"Cannot create base Model.\");\n\n const chain = [] as Model.Type[];\n let keys = new Set<string>();\n\n ID.set(model, `${T}-${uid()}`);\n\n while(T.name){\n for(const cb of NOTIFY.get(T) || [])\n addListener(model, cb);\n\n if(T === Model) break;\n else chain.unshift(T);\n\n T = Object.getPrototypeOf(T)\n }\n\n for(const type of chain){\n if(METHODS.has(type)){\n keys = METHODS.get(type)!;\n continue;\n }\n\n METHODS.set(type, keys = new Set(keys));\n\n for(const [key, { value }] of Object.entries(\n Object.getOwnPropertyDescriptors(type.prototype)\n )){\n if(!value || key == \"constructor\")\n continue;\n \n function bind(this: Model, method = value){\n const value = method.bind(this.is);\n \n METHOD.set(value, method);\n define(this.is, key, { value, writable: true });\n \n return value;\n }\n\n keys.add(key);\n define(type.prototype, key, { get: bind, set: bind });\n }\n }\n}\n\n/**\n * Apply model arguemnts, run callbacks and observe properties.\n * Accumulate and handle cleanup events.\n **/\nfunction init(model: Model, args: Model.Args){\n const methods = METHODS.get(model.constructor as Model.Type)!;\n const state = {} as Record<string | number | symbol, unknown>;\n\n STATE.set(model, state);\n\n args = args.flat().filter(arg => {\n if(typeof arg != \"string\")\n return true;\n\n ID.set(model, arg);\n });\n\n addListener(model, () => {\n if(!PARENT.has(model))\n PARENT.set(model, null);\n \n args.forEach((arg) => {\n const use = typeof arg == \"function\"\n ? arg.call(model, model)\n : arg as Model.Assign<Model>;\n\n if(use instanceof Promise)\n use.catch(err => {\n console.error(`Async error in constructor for ${model}:`);\n console.error(err);\n });\n else if(typeof use == \"function\")\n addListener(model, use, null)\n else if(typeof use == \"object\")\n for(const key in use)\n if(key in model || methods.has(key))\n model[key as keyof Model] = use[key] as any;\n });\n\n for(const key in model){\n const desc = Object.getOwnPropertyDescriptor(model, key)!;\n\n if(\"value\" in desc){\n update(model, key, desc.value, true);\n define(model, key, {\n configurable: false,\n get(){\n return watch(this, key, state[key]);\n },\n set(value){\n update(model, key, value);\n mayAdopt(model, value);\n }\n });\n }\n }\n\n addListener(model, () => {\n for(const [_, value] of model)\n if(value instanceof Model && PARENT.get(value) === model)\n value.set(null);\n \n Object.freeze(state);\n }, null);\n \n return null;\n });\n}\n\nfunction mayAdopt(parent: Model, child: unknown){\n if(child instanceof Model && !PARENT.has(child)){\n PARENT.set(child, parent);\n event(child);\n }\n}\n\nfunction fetch(subject: Model, property: string, required?: boolean){\n const state = STATE.get(subject)!;\n \n if(property in state || required === false){\n const value = state[property];\n\n if(value !== undefined || !required)\n return value;\n }\n\n const error = new Error(`${subject}.${property} is not yet available.`);\n const promise = new Promise<any>((resolve, reject) => {\n addListener(subject, key => {\n if(key === property){\n resolve(state[key]);\n return null;\n }\n\n if(key === null)\n reject(new Error(`${subject} is destroyed.`));\n });\n });\n\n throw Object.assign(promise, {\n toString: () => String(error),\n name: \"Suspense\",\n message: error.message,\n stack: error.stack\n });\n}\n\n/** Currently accumulating export. Stores real values of placeholder properties such as ref() or child models. */\nlet EXPORT: Map<any, any> | undefined;\n\nfunction snapshot<T extends Model>(model: T): Model.State<T> {\n const values = {} as any;\n let isNotRecursive;\n\n if(!EXPORT){\n isNotRecursive = true;\n EXPORT = new Map([[model, values]]);\n }\n\n for(let [key, value] of model){\n if(EXPORT.has(value))\n value = EXPORT.get(value);\n else if(value && typeof value == \"object\" && \"get\" in value && typeof value.get === \"function\")\n EXPORT.set(value, value = value.get());\n\n values[key] = value;\n }\n\n if(isNotRecursive)\n EXPORT = undefined;\n\n return Object.freeze(values);\n}\n\nfunction update<T>(\n subject: Model,\n key: string | number | symbol,\n value: T,\n arg?: boolean | Model.Setter<T>){\n\n const state = STATE.get(subject)!;\n\n if(Object.isFrozen(state))\n throw new Error(`Tried to update ${String(key)} but ${subject} is destroyed.`);\n\n const previous = state[key] as T;\n\n if(typeof arg == \"function\"){\n const out = arg.call(subject, value, previous);\n\n if(out === false)\n return false;\n\n if(typeof out == \"function\")\n value = out();\n }\n\n if(value === previous)\n return;\n\n state[key] = value;\n\n if(arg !== true)\n event(subject, key);\n\n return true;\n}\n\n/** Random alphanumberic of length 6; always starts with a letter. */\nfunction uid(){\n return (0.278 + Math.random() * 0.722).toString(36).substring(2, 8).toUpperCase();\n}\n\nexport {\n event,\n fetch,\n mayAdopt,\n METHOD,\n Model,\n PARENT,\n STATE,\n uid,\n update,\n}","import { Model, PARENT, define, uid } from './model';\n\nconst LOOKUP = new WeakMap<Model, Context | ((got: Context) => void)[]>();\nconst KEYS = new Map<symbol | Model.Type, symbol>();\n\nfunction key(T: Model.Type | symbol, upstream?: boolean): symbol {\n let K = KEYS.get(T);\n\n if(!K)\n KEYS.set(T, K = Symbol(\n typeof T == \"symbol\" ? \"get \" + T.description : String(T)\n ));\n \n return upstream ? key(K) : K;\n}\n\nfunction keys(from: Model.Type, upstream?: boolean){\n const keys = new Set<symbol>();\n\n do {\n keys.add(key(from, upstream));\n }\n while((from = Object.getPrototypeOf(from)) !== Model);\n\n return keys;\n}\n\ndeclare namespace Context {\n type Multiple<T extends Model> = {\n [key: string | number]: Model.Init<T> | T;\n };\n\n type Accept<T extends Model = Model> = T | Model.Init<T> | Multiple<T>;\n\n type Expect<T extends Model = Model> = (model: T) => (() => void) | void;\n}\n\ninterface Context {\n [key: symbol]: Model | Context.Expect | null | undefined;\n}\n\nclass Context {\n static get<T extends Model>(on: Model, callback: ((got: Context) => void)): void;\n static get<T extends Model>(on: Model): Context | undefined;\n static get(from: Model, callback?: (got: Context) => void){\n const waiting = LOOKUP.get(from);\n\n if(waiting instanceof Context){\n if(callback)\n callback(waiting);\n\n return waiting;\n }\n\n if(callback)\n if(waiting) \n waiting.push(callback);\n else \n LOOKUP.set(from, [callback]);\n }\n\n public id!: string;\n\n protected layer = new Map<string | number, Model | Model.Type>();\n protected cleanup = new Set<() => void>();\n\n constructor(inputs?: Context.Accept){\n if(inputs)\n this.include(inputs);\n }\n\n /** Run callback when a specified type is registered to a **child** context. */\n public has<T extends Model>(Type: Model.Type<T>, callback: (model: T) => void){\n define(this, key(Type, true), { value: callback });\n }\n\n /** Find specified type registered to a parent context. Returns undefined if none are found. */\n public get<T extends Model>(Type: Model.Type<T>, require: true): T;\n public get<T extends Model>(Type: Model.Type<T>, require?: boolean): T | undefined;\n public get<T extends Model>(Type: Model.Type<T>, require?: boolean){\n const result = this[key(Type)];\n\n if(result === null)\n throw new Error(`Did find ${Type} in context, but multiple were defined.`);\n\n if(result)\n return result as T;\n\n if(require)\n throw new Error(`Could not find ${Type} in context.`);\n }\n\n public push(inputs?: Context.Accept){\n const next = Object.create(this) as this;\n\n next.layer = new Map();\n next.cleanup = new Set();\n\n if(inputs)\n next.include(inputs);\n\n return next;\n }\n\n public pop(){\n for(const key of Object.getOwnPropertySymbols(this))\n delete (this as any)[key];\n\n this.cleanup.forEach(cb => cb());\n this.layer.clear();\n }\n\n public include<T extends Model>(\n inputs: Context.Accept<T>,\n forEach?: Context.Expect<T>\n ){\n const init = new Map<Model, boolean>();\n\n if(typeof inputs == \"function\" || inputs instanceof Model)\n inputs = { 0: inputs };\n\n Object.entries(inputs).forEach(([K, V]: [string, Model | Model.Init<Model>]) => {\n if(Model.is(V) || V instanceof Model){\n const exists = this.layer.get(K);\n \n if(!exists){\n const instance = this.add(V);\n \n this.layer.set(K, V)\n init.set(instance, true);\n }\n // Context must force-reset because inputs are no longer safe.\n else if(exists !== V){ \n this.pop();\n this.id = uid();\n this.include(inputs);\n }\n\n return;\n }\n\n throw new Error(\n `Context may only include instance or class \\`extends Model\\` but got ${\n K == '0' || K == V ? V : `${V} (as '${K}')`\n }.`\n );\n })\n\n for(const [model, explicit] of init){\n model.set();\n\n if(explicit && forEach)\n forEach(model as T);\n\n for(const [_key, value] of model)\n if(PARENT.get(value as Model) === model){\n this.add(value as Model, true);\n init.set(value as Model, false);\n }\n }\n }\n\n protected add<T extends Model>(\n input: T | Model.Init<T>,\n implicit?: boolean){\n\n let T: Model.Type<T>;\n let I: T;\n\n if(typeof input == \"function\"){\n Model.is(input);\n\n T = input;\n I = new input() as T;\n this.cleanup.add(() => I.set(null));\n }\n else {\n T = input.constructor as Model.Type<T>;\n I = input;\n }\n\n keys(T, true).forEach(K => {\n const expects = this[K] as Context.Expect | undefined;\n \n if(!expects)\n return;\n \n const callback = expects(I);\n \n if(callback)\n this.cleanup.add(callback);\n });\n\n keys(T).forEach(K => {\n const value = this.hasOwnProperty(K) ? null : I;\n\n if(value || this[K] !== I && !implicit)\n define(this, K, {\n configurable: true,\n value\n });\n });\n\n const waiting = LOOKUP.get(I);\n \n if(waiting instanceof Array)\n waiting.forEach(cb => cb(this));\n\n LOOKUP.set(I, this);\n\n return I;\n }\n}\n\nexport { Context }","import { watch } from '../control';\nimport { define, fetch, mayAdopt, Model, PARENT, STATE, update } from '../model';\n\nconst INSTRUCT = new Map<symbol, Model.Instruction>();\n\nfunction use <T> (instruction: Model.Instruction<T>): T extends void ? unknown : T;\n\nfunction use <T extends Model> (Type: Model.Init<T>, required: false): T | undefined;\n\nfunction use <T extends Model> (Type: Model.Init<T>, ready?: (i: T) => void): T;\n\nfunction use(\n arg1: Model.Init | Model.Instruction,\n arg2?: ((i: Model) => void) | boolean){\n\n const token = Symbol(\"instruction\");\n\n if(Model.is(arg1)){\n const type = arg1;\n\n arg1 = (key, subject) => {\n const value = new type();\n const desc: Model.Descriptor = { set };\n\n set(value);\n PARENT.set(value, subject);\n\n function set(next: Model | undefined){\n if(next ? !(next instanceof type) : arg2 !== false)\n throw new Error(`${subject}.${key} expected Model of type ${type} but got ${next && next.constructor}.`)\n \n update(subject, key, next);\n \n if(next && typeof arg2 == \"function\")\n arg2(next);\n \n return false;\n }\n \n return desc;\n }\n }\n\n INSTRUCT.set(token, arg1);\n return token;\n}\n\nModel.on((_, model) => {\n const state = STATE.get(model)!;\n\n for(const key in model){\n const { value } = Object.getOwnPropertyDescriptor(model, key)!;\n const instruction = INSTRUCT.get(value);\n\n if(!instruction){\n mayAdopt(model, value);\n continue;\n }\n\n INSTRUCT.delete(value);\n delete (model as any)[key];\n\n const output = instruction.call(model, key, model, state);\n\n if(!output)\n continue;\n\n const desc = typeof output == \"object\" ? output : { get: output };\n\n if(\"value\" in desc)\n state[key] = desc.value;\n\n define(model, key, {\n enumerable: desc.enumerable !== false,\n get(this: Model){\n return watch(this, key, \n typeof desc.get == \"function\"\n ? desc.get(this)\n : fetch(model, key, desc.get)\n );\n },\n set(next){\n if(desc.set === false)\n throw new Error(`${model}.${key} is read-only.`);\n\n update(model, key, next, desc.set);\n }\n })\n }\n\n return null;\n});\n\nexport { use }","import { Context } from '../context';\nimport { createEffect } from '../control';\nimport { fetch, METHOD, Model, PARENT, event, update } from '../model';\nimport { use } from './use';\n\ntype Type<T extends Model> = Model.Type<T> & typeof Model;\n\nconst STALE = new WeakSet<() => void>();\n\ndeclare namespace get {\n type Compute<T, S = any> = (on: S, key: string) => T;\n\n type Factory<T, S = any> = (this: S, key: string, thisArg: S) => T;\n\n type Source<T extends Model = Model> = (resolve: (x: T) => void) => void;\n\n type Effect<T> = (model: T, key: string) => (() => void) | void;\n}\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Type - Type of controller compatible with this class. \n * @param expectParent - If true, will throw if Model is created without a parent.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, asParent?: true): T;\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Type - Type of controller compatible with this class. \n * @param required - If false, property may be undefined. Otherwise will throw suspense.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, required?: false): T | undefined;\n\n/**\n * Implement a computed value from a foreign model. Output will be generated by provided function,\n * where the foreign model will be passed to that function.\n * \n * @param source - Type of Model to fetch for computation.\n * @param compute - Compute function. Will update automatically as input values change.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, effect: get.Effect<T>): T;\n\n/**\n * Implement a computed value; output will be generated by provided function.\n *\n * @param source - Source model from which computed value will be a subscriber.\n * @param compute - Compute function. Bound to a subscriber-proxy of source, returns output value. Will update automatically as input values change.\n */\nfunction get <R, T extends Model> (source: T, compute: get.Compute<R, T>): R;\n\n/**\n * Implement a computed value; output is returned by function from provided factory.\n * \n * Factory is bound to owner of property.\n *\n * @param compute - Factory function to generate a getter to subscribe dependancies.\n */\nfunction get <R, T> (compute: get.Factory<R, T>): R;\n \nfunction get<R, T extends Model>(\n arg0: T | get.Factory<R, T> | Type<T>,\n arg1?: Function | boolean){\n\n return use((key, subject, state) => {\n if(typeof arg0 == \"symbol\")\n throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`)\n\n if(Model.is(arg0)){\n const hasParent = PARENT.get(subject) as T;\n\n // TODO: notify on discovered context \n function assign(value: T) {\n if (typeof arg1 == \"function\")\n value.get(x => (arg1 as Function)(x, key));\n\n update(subject, key, value);\n }\n\n if(!hasParent){\n if(arg1 === true)\n throw new Error(`${subject} may only exist as a child of type ${arg0}.`);\n\n Context.get(subject, (context) => {\n const model = context.get(arg0);\n\n if(model)\n assign(model);\n else if(arg1 !== false)\n throw new Error(`Required ${arg0} not found in context for ${subject}.`)\n });\n }\n else if(!arg0 || hasParent instanceof arg0)\n assign(hasParent);\n else\n throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);\n\n return {\n get: arg1 !== false\n };\n }\n \n let from = subject;\n \n if(arg0 instanceof Model){\n from = arg0;\n }\n else {\n const fn = METHOD.get(arg0) || arg0;\n arg1 = ((p, k) => fn.call(p, k, p)) as get.Effect<T>;\n }\n\n const source: get.Source<T> = resolve => resolve(from);\n const getter = arg1 as get.Compute<R, T>;\n\n let reset: (() => void) | undefined;\n let isAsync: boolean;\n let proxy: any;\n\n function connect(model: Model){\n reset = createEffect(model, current => {\n proxy = current;\n\n if(!(key in state) || STALE.delete(compute))\n compute(!reset);\n\n return (didUpdate) => {\n if(didUpdate){\n STALE.add(compute);\n event(subject, key, true);\n }\n };\n }, false)\n }\n\n function compute(initial?: boolean){\n let next: R | undefined;\n\n try {\n next = getter.call(proxy, proxy, key);\n }\n catch(err){\n console.warn(`An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} ${subject}.${key}.`)\n\n if(initial)\n throw err;\n\n console.error(err);\n }\n\n update(subject, key, next, !isAsync);\n }\n\n return () => {\n if(!proxy){\n source(connect);\n isAsync = true;\n }\n\n if(STALE.delete(compute))\n compute();\n\n return fetch(subject, key, !proxy) as T;\n }\n })\n}\n\nexport { get };","import { context } from '../control';\nimport { Model, define, update } from '../model';\nimport { use } from './use';\n\ndeclare namespace ref {\n type Callback<T> = (argument: T) =>\n ((next: T | null) => void) | Promise<void> | void | boolean;\n\n interface Object<T = any> {\n (next: T | null): void;\n\n /** Current value held by this reference. */\n current: T | null;\n\n /** Retrieve current value. */\n get(): T | null;\n }\n\n /** Object with references to all managed values of `T`. */\n\n /** Object with references to all managed values of `T`. */\n type Proxy<T extends Model> =\n & { [P in Model.Field<T>]-?: Object<T[P]> }\n & { get(): T };\n\n type CustomProxy<T extends Model, R> =\n & { [P in Model.Field<T>]-?: R }\n & { get(): T };\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property is a function to set value in state when invoked.\n *\n * *Properties are simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param target - Source model from which to reference values.\n */\nfunction ref <T extends Model> (target: T): ref.Proxy<T>;\n\n/**\n * Creates an object with values based on managed values.\n * Each property will invoke mapper function on first access supply\n * the its return value going forward.\n *\n * @param target - Source model from which to reference values.\n * @param mapper - Function producing the placeholder value for any given property.\n */\nfunction ref <O extends Model, R>\n (target: O, mapper: (key: Model.Field<O>) => R): ref.CustomProxy<O, R>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n */\nfunction ref <T> (callback?: ref.Callback<T>): ref.Object<T>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n * @param ignoreNull - Default `true`. If `false`, will still callback with `null`.\n */\nfunction ref <T> (callback: ref.Callback<T | null>, ignoreNull: boolean): ref.Object<T>;\n\nfunction ref<T>(\n arg?: ref.Callback<T> | Model,\n arg2?: ((key: string) => any) | boolean){\n\n return use<T>((key, subject, state) => {\n let value = {};\n\n if(arg === subject)\n subject.get(() => {\n for(const key in state)\n if(typeof arg2 == \"function\")\n define(value, key, {\n configurable: true,\n get(){\n const out = arg2(key);\n define(value, key, { value: out });\n return out;\n }\n })\n else {\n const get = () => state[key];\n const set = (value: unknown) => {\n update(subject, key, value)\n };\n \n define(set, \"current\", { get, set });\n define(set, \"get\", { value: get });\n define(value, key, { value: set });\n }\n })\n\n else if(typeof arg == \"object\")\n throw new Error(\"ref instruction does not support object which is not 'this'\");\n\n else {\n let unset: ((next: T) => void) | undefined;\n\n const get = () => state[key];\n const set = (value?: any) => {\n if(!update(subject, key, value) || !arg)\n return;\n\n if(unset)\n unset = void unset(value);\n \n if(value === null && arg2 !== false)\n return;\n\n const ctx = context();\n const out = arg.call(subject, value);\n const flush = ctx();\n\n unset = key => {\n if(typeof out == \"function\")\n out(key);\n\n flush();\n }\n };\n \n state[key] = null;\n value = Object.defineProperties(set, {\n current: { get, set },\n get: { value: get }\n }) as ref.Object<T>;\n }\n\n define(subject, key, { value });\n })\n}\n\nexport { ref }","import { context } from '../control';\nimport { Model, event, update } from '../model';\nimport { use } from './use';\n\ndeclare namespace set {\n type Callback<T, S = any> = (this: S, next: T, previous: T) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n\n type Factory<T, S = any> = (this: S, key: string) => Promise<T> | T;\n}\n\n/**\n * Set property as `undefined` but required.\n * \n * Property cannot be accessed until it is defined. If accessed while undefined, a hybrid\n * `Promise`/`Error` (aka: [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html)) will be thrown.\n */\nfunction set <T = any>(): T;\n\n/**\n * Set property with a factory function.\n * \n * Run factory only if/when accessed. Value will be undefined until\n * factory resolves, which will also dispatch an update for the property.\n */\nfunction set <T> (factory: set.Factory<T> | Promise<T>, required: false): T | undefined;\n\n/**\n * Set property with a factory function.\n *\n * If async, property cannot be accessed until resolves, yeilding a result.\n * If accessed while still processing, React Suspense will be thrown.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - If true run factory immediately on creation, otherwise on access.\n */\nfunction set <T> (factory: set.Factory<T> | Promise<T>, required?: boolean): T;\n\n/**\n * Set a property with empty placeholder and/or update callback.\n * \n * @param value - Starting value for property. If undefined, suspense will be thrown on access, until value is set and accepted by callback.\n * @param onUpdate - Callback run when property is set. If returns false, update is not accepted and property will keep previous value.\n */\nfunction set <T> (value: T | undefined, onUpdate?: set.Callback<T>): T;\n\nfunction set <T> (\n value?: set.Factory<T> | Promise<T> | T,\n argument?: set.Callback<any> | boolean){\n\n return use<T>((key, subject) => {\n const property: Model.Descriptor = {};\n\n if(typeof value == \"function\" || value instanceof Promise){\n function init(){\n if(typeof value == \"function\")\n try {\n value = attempt(value.bind(subject, key));\n }\n catch(err){\n console.warn(`Generating initial value for ${subject}.${key} failed.`);\n throw err;\n }\n\n property.get = argument === true;\n\n if(value instanceof Promise){\n value\n .then(value => {\n update(subject, key, value);\n return value;\n })\n .catch(err => {\n event(subject, key);\n property.get = () => { throw err };\n })\n }\n else\n update(subject, key, value);\n\n if(0 in arguments)\n return subject[key];\n }\n\n if(argument)\n init();\n else\n property.get = init;\n }\n else if(value !== undefined)\n property.value = value;\n\n if(typeof argument == \"function\"){\n let unset: ((next: T) => void) | undefined;\n\n property.set = function(this: any, value: any, previous: any){\n const ctx = context();\n const out = argument.call(this, value, previous);\n const flush = ctx();\n\n if(out === false)\n return out;\n\n if(typeof unset == \"function\")\n unset(value);\n\n unset = (next: T) => {\n if(typeof out == \"function\")\n out(next);\n\n flush();\n }\n }\n }\n else\n property.set = value => {\n property.get = undefined;\n update(subject, key, value);\n }\n\n return property;\n })\n}\n\nfunction attempt(fn: () => any): any {\n function retry(err: unknown){\n if(err instanceof Promise)\n return err.then(compute);\n else\n throw err;\n }\n\n function compute(): any {\n try {\n const output = fn();\n\n return output instanceof Promise\n ? output.catch(retry)\n : output;\n }\n catch(err){\n return retry(err);\n }\n }\n\n return compute();\n}\n\nexport { set }","import { Context } from '../context';\nimport { Model, update } from '../model';\nimport { use } from './use';\n\nconst APPLY = new WeakMap<Model, (model: Model) => (() => void) | boolean | void>();\n\ndeclare namespace has {\n type Callback<T = any> = (model: T, recipient: Model) => void | boolean | (() => void);\n}\n\nfunction has <T extends Model> (type: Model.Type<T>, callback?: has.Callback<T>): readonly T[];\nfunction has (callback?: has.Callback): readonly Model[];\n \nfunction has <T extends Model> (\n arg1?: Model.Type<T> | has.Callback<Model>,\n arg2?: has.Callback<T>){\n\n return use<T[]>((key, subject) => {\n const applied = new Set<Model>();\n const apply = () => {\n update(subject, key, Object.freeze(Array.from(applied)));\n }\n\n if(Model.is(arg1))\n Context.get(subject, context => {\n context.has(arg1, model => {\n let remove: (() => void) | void | undefined;\n let disconnect: (() => void) | undefined;\n \n if(applied.has(model))\n return;\n \n const callback = APPLY.get(model);\n \n if(callback){\n const after = callback(subject);\n \n if(after === false)\n return;\n \n if(typeof after == \"function\")\n disconnect = after;\n }\n \n if(typeof arg2 == \"function\"){\n const done = arg2(model, subject);\n \n if(done === false)\n return false;\n \n remove = () => {\n if(typeof done == \"function\")\n done();\n }\n }\n \n applied.add(model);\n apply();\n \n const done = () => { \n ignore();\n \n applied.delete(model);\n apply();\n \n if(disconnect)\n disconnect();\n \n if(typeof remove == \"function\")\n remove();\n }\n \n const ignore = model.get(null, done);\n \n return done;\n })\n });\n else {\n if(APPLY.has(subject))\n throw new Error(`'has' callback can only be used once per model.`);\n\n APPLY.set(subject, recipient => {\n let remove: (() => void) | boolean | void;\n\n if(arg1){\n remove = arg1(recipient, subject);\n \n if(remove === false)\n return false;\n }\n\n applied.add(recipient);\n apply();\n\n return () => {\n applied.delete(recipient);\n apply();\n\n if(typeof remove == \"function\")\n remove();\n }\n });\n }\n\n return { value: [] };\n })\n}\n\nexport { has }"],"mappings":"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","names":["key","pending","res","event","listeners","pending","update","key","keys","bind","value","use","keys","require","key","init","key","set","key","assign","context","key","get","set","value","key","init","value","key","context","done"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/control.ts","../src/model.ts","../src/context.ts","../src/instruction/use.ts","../src/instruction/get.ts","../src/instruction/ref.ts","../src/instruction/set.ts","../src/instruction/has.ts"],"sourcesContent":["export { get } from './instruction/get';\nexport { ref } from './instruction/ref';\nexport { set } from './instruction/set';\nexport { use } from './instruction/use';\nexport { has } from './instruction/has';\n\nexport { Model, Model as default } from './model';\nexport { createEffect, createProxy, addListener } from './control';\nexport { Context } from './context';","import type { Model } from \"./model\";\n\n/**\n * Update callback function.\n * \n * @param key -\n * - `string` - property which has updated.\n * - `false` - a normal update has completed.\n * - `true` - initial event; instance is ready.\n * - `null` - terminal event; instance is expired.\n * @param source - Instance of Model for which update has occured.\n */\ntype OnUpdate<T extends Model = any> = \n (this: T, key: unknown, source: T) => (() => void) | null | void;\n\ntype OnAccess<T extends Model = any, R = unknown> =\n (from: T, key: string | number, value: R) => unknown;\n\ntype Effect<T extends Model> = (this: T, proxy: T) =>\n ((update: boolean | null) => void) | Promise<void> | null | void;\n\ntype Event = number | string | null | boolean | symbol;\n\n/** Placeholder event determines if model is initialized or not. */\nconst onReady = () => null;\n\nconst LISTENERS = new WeakMap<Model, Map<OnUpdate, Set<Event> | undefined>>();\n\n/** Events pending for a given object. */\nconst PENDING = new WeakMap<Model, Set<Event>>();\n\n/** Update register. */\nconst PENDING_KEYS = new WeakMap<Model, Set<string | number | symbol>>();\n\n/** Central event dispatch. Bunches all updates to occur at same time. */\nconst DISPATCH = new Set<() => void>();\n\nconst OBSERVER = new WeakMap<Model, OnAccess>();\n\nfunction addListener<T extends Model>(subject: T, callback: OnUpdate<T>, select?: Event){\n let listeners = LISTENERS.get(subject)!;\n\n if(!listeners)\n LISTENERS.set(subject, listeners = new Map([[onReady, undefined]]));\n\n const filter = select === undefined ? undefined : new Set([select]);\n\n if(!listeners.has(onReady) && !filter)\n callback.call(subject, true, subject);\n\n listeners.set(callback, filter);\n\n return () => listeners.delete(callback);\n}\n\nfunction emit(model: Model, key: Event): void {\n const listeners = LISTENERS.get(model)!;\n const notReady = listeners.has(onReady);\n\n if(key === true && !notReady)\n return;\n\n let pending = PENDING.get(model);\n\n if(pending){\n pending.add(key);\n return;\n }\n\n PENDING.set(model, pending = new Set(notReady ? [true, key] : [key]));\n\n for(const key of pending)\n for(const [callback, filter] of listeners)\n if(!filter || filter.has(key)){\n const after = callback.call(model, key, model);\n\n if(after)\n enqueue(after);\n\n else if(after === null)\n listeners.delete(callback);\n }\n\n if(key === null)\n listeners.clear();\n \n PENDING.delete(model);\n}\n\nfunction event(\n subject: Model,\n key?: string | number | symbol | null,\n silent?: boolean){\n\n if(key === null)\n return emit(subject, key);\n\n if(!key)\n return emit(subject, true);\n\n let pending = PENDING_KEYS.get(subject);\n\n if(!pending){\n PENDING_KEYS.set(subject, pending = new Set());\n\n if(!silent)\n enqueue(() => {\n emit(subject, false);\n PENDING_KEYS.delete(subject)\n })\n }\n\n pending.add(key);\n\n if(!silent)\n emit(subject, key);\n}\n\nfunction pending<T extends Model>(subject: T){\n if(PENDING_KEYS.has(subject))\n return <PromiseLike<Model.Event<T>[]>> {\n then: (res) => new Promise<any>(res => {\n const remove = addListener(subject, key => {\n if(key !== true){\n remove();\n return res.bind(null, Array.from(PENDING_KEYS.get(subject)!));\n }\n });\n }).then(res)\n }\n}\n\nfunction enqueue(eventHandler: (() => void)){\n if(!DISPATCH.size)\n setTimeout(() => {\n DISPATCH.forEach(event => {\n try {\n event();\n }\n catch(err){\n console.error(err);\n }\n });\n DISPATCH.clear();\n }, 0);\n\n DISPATCH.add(eventHandler);\n}\n\nfunction createProxy<T extends Model>(from: T, observer: OnAccess<T>){\n const proxy = Object.create(from) as T;\n OBSERVER.set(proxy, observer);\n return proxy;\n}\n\nfunction watch(from: any, key: string | number, value?: any){\n const access = OBSERVER.get(from);\n return access ? access(from, key, value) : value;\n}\n\n/**\n * Create a side-effect which will update whenever values accessed change.\n * Callback is called immediately and whenever values are stale.\n * \n * @param target - Instance of Model to observe.\n * @param callback - Function to invoke when values change.\n * @param requireValues - If `true` will throw if accessing a value which is `undefined`.\n */\nfunction createEffect<T extends Model>(target: T, callback: Effect<Required<T>>, requireValues: true): () => void;\nfunction createEffect<T extends Model>(target: T, callback: Effect<T>, recursive?: boolean): () => void;\nfunction createEffect<T extends Model>(target: T, callback: Effect<T>, argument?: boolean){\n const listeners = LISTENERS.get(target)!;\n\n let unset: ((update: boolean | null) => void) | undefined;\n let reset: (() => void) | null | undefined;\n\n function invoke(){\n let stale: boolean | undefined;\n\n const subscriber = createProxy(target, access);\n\n LISTENERS.set(subscriber, listeners);\n\n function onUpdate() {\n if (stale)\n return null;\n\n stale = true;\n\n if (reset && unset) {\n unset(true);\n unset = undefined;\n }\n\n return reset;\n }\n\n function access(from: Model, key: string | number, value: any) {\n if(value === undefined && argument)\n throw new Error(`${from}.${key} is required in this context.`);\n\n const listeners = LISTENERS.get(from)!;\n let listener = listeners.get(onUpdate);\n\n if(!listener)\n listeners.set(onUpdate, listener = new Set);\n\n listener.add(key);\n\n const nested = LISTENERS.get(value);\n\n if(nested)\n LISTENERS.set(\n value = createProxy(value, access),\n nested\n );\n\n return value;\n }\n\n try {\n const ctx = context(argument === false)\n const ret = callback.call(subscriber, subscriber);\n const flush = ctx();\n\n reset = ret === null ? null : invoke;\n unset = key => {\n if(typeof ret == \"function\")\n ret(key);\n\n flush();\n }\n }\n catch(err){\n if(err instanceof Promise){\n reset = undefined;\n err.then(invoke);\n }\n else\n throw err;\n }\n }\n\n function cleanup(){\n if(unset)\n unset(false);\n\n reset = null;\n };\n\n if(EffectContext && argument !== false)\n EffectContext.add(cleanup);\n\n addListener(target, key => {\n if(key === true)\n invoke();\n\n else if(!reset)\n return reset;\n\n if(key === null && unset)\n unset(null);\n });\n \n return cleanup;\n}\n\nlet EffectContext: Set<() => void> | undefined;\n\nexport function context(ignore?: boolean){\n if(ignore)\n return () => () => {};\n\n const current = EffectContext;\n const ctx = EffectContext = new Set;\n\n return () => {\n EffectContext = current;\n \n return () => {\n ctx.forEach(fn => fn());\n }\n }\n}\n\nexport {\n addListener,\n createEffect,\n createProxy,\n event,\n OnUpdate,\n PENDING_KEYS,\n pending,\n watch\n}","import { addListener, createEffect, event, OnUpdate, pending, PENDING_KEYS, watch } from './control';\n\nexport const define = Object.defineProperty;\n\n/** Register for all active models via string identifiers (usually unique). */\nconst ID = new WeakMap<Model, string>();\n\n/** Internal state assigned to models. */\nconst STATE = new WeakMap<Model, Record<string | number | symbol, unknown>>();\n\n/** External listeners for any given Model. */\nconst NOTIFY = new WeakMap<Model.Type, Set<OnUpdate>>();\n\n/** Parent-child relationships. */\nconst PARENT = new WeakMap<Model, Model | null>();\n\n/** List of methods defined by a given type. */\nconst METHODS = new WeakMap<Model.Type, Set<string>>();\n\n/** Reference bound instance methods to real ones. */\nconst METHOD = new WeakMap<any, any>();\n\ndeclare namespace Model {\n /** Any type of Model, using own class constructor as its identifier. */\n type Type<T extends Model = Model> =\n (abstract new (...args: any[]) => T) & typeof Model;\n\n /** A Model constructor, but which is not abstract. */\n type Init<T extends Model = Model> =\n (new (...args: Model.Args<T>) => T) & Omit<typeof Model, never>;\n\n /**\n * Model constructor callback - is called when Model finishes intializing.\n * Returned function will run when model is destroyed.\n */\n type Callback<T extends Model = Model> =\n (this: T, thisArg: T) => Promise<void> | (() => void) | Assign<T> | void;\n\n /** Model constructor argument */\n type Argument<T extends Model = Model> = Assign<T> | Callback<T> | string | void;\n\n /** Model constructor arguments */\n type Args<T extends Model = any> = (Argument<T> | Args<T>)[];\n\n /** Subset of `keyof T` which are not methods or defined by base Model U. **/\n type Field<T> = Exclude<keyof T, keyof Model>;\n\n /** Any valid key for model, including but not limited to Field<T>. */\n type Event<T> = Field<T> | (string & {}) | number | symbol;\n\n /** Object overlay to override values and methods on a model. */\n type Assign<T> = {\n [K in Field<T>]?:\n T[K] extends (...args: infer A) => infer R \n ? (this: T, ...args: A) => R\n : T[K];\n } & Record<string, unknown>;\n\n /** Export/Import compatible value for a given property in a Model. */\n type Export<R> = R extends { get(): infer T } ? T : R;\n\n /** Value for a property managed by a model. */\n type Value<T extends Model, K extends Event<T>> =\n K extends keyof T ? Export<T[K]> : unknown;\n\n type OnEvent<T extends Model> =\n (this: T, key: unknown, source: T) => (() => void) | void | null;\n\n type OnUpdate<T extends Model, K extends Event<T>> =\n (this: T, key: K, thisArg: K) => void;\n\n /**\n * Values from current state of given model.\n * Differs from `Values` as values here will drill\n * into \"real\" values held by exotics like ref.Object.\n */\n type State<T> = { [P in Field<T>]: Export<T[P]> };\n\n /** Object comperable to data found in T. */\n type Values<T> = { [P in Field<T>]?: Export<T[P]> };\n\n /** Exotic value, where actual value is contained within. */\n type Ref<T = any> = {\n (next: T): void;\n current: T | null;\n }\n\n /**\n * A callback function which is subscribed to parent and updates when accessed properties change.\n * \n * @param current - Current state of this model. This is a proxy which detects properties which\n * where accessed, and thus depended upon to stay current.\n * \n * @param update - Set of properties which have changed, and events fired, since last update.\n * \n * @returns A callback function which will be called when this effect is stale.\n */\n type Effect<T> = (this: T, current: T, update: Set<Event<T>>) =>\n EffectCallback | Promise<void> | null | void;\n\n /**\n * A callback function returned by effect. Will be called when effect is stale.\n * \n * @param update - `true` if update is pending, `false` effect has been cancelled, `null` if model is destroyed.\n */\n type EffectCallback = ((update: boolean | null) => void);\n\n /**\n * Property initializer, will run upon instance creation.\n * Optional returned callback will run when once upon first access.\n */\n type Instruction<T = any, M extends Model = any> =\n // TODO: Should this allow for numbers/symbol properties?\n (this: M, key: Extract<Field<M>, string>, thisArg: M, state: State<M>) =>\n Descriptor<T> | ((source: M) => T) | void;\n\n type Getter<T> = (source: Model) => T;\n type Setter<T> = (value: T, previous: T) => boolean | void | (() => T);\n\n type Descriptor<T = any> = {\n get?: Getter<T> | boolean;\n set?: Setter<T> | boolean;\n enumerable?: boolean;\n value?: T;\n }\n}\n\ninterface Model {\n /**\n * Loopback to instance of this model. This is useful when in a subscribed context,\n * to keep write access to `this` after a destructure. You can use it to read variables silently as well.\n **/\n is: this;\n}\n\nabstract class Model {\n constructor(...args: Model.Args){\n prepare(this);\n define(this, \"is\", { value: this });\n init(this, args);\n }\n\n /**\n * Pull current values from state. Flattens all models and exotic values recursively.\n * \n * @returns Object with all values from this model.\n **/\n get(): Model.State<this>;\n\n /**\n * Run a function which will run automatically when accessed values change.\n * \n * @param effect Function to run, and again whenever accessed values change.\n * If effect returns a function, it will be called when a change occurs (syncronously),\n * effect is cancelled, or parent model is destroyed.\n * @returns Function to cancel listener.\n */\n get(effect: Model.Effect<this>): () => void;\n\n /**\n * Get value of a property.\n * \n * @param key - Property to get value of.\n * @param required - If true, will throw an error if property is not available.\n * @returns Value of property.\n */\n get<T extends Model.Event<this>>(key: T, required?: boolean): Model.Value<this, T>;\n\n /**\n * Run a function when a property is updated.\n * \n * @param key - Property to watch for updates.\n * @param callback - Function to call when property is updated.\n * @returns Function to cancel listener.\n */\n get<T extends Model.Event<this>>(key: T, callback: Model.OnUpdate<this, T>): () => void;\n\n /**\n * Check if model is expired.\n * \n * @param status - `null` to check if model is expired.\n * @returns `true` if model is expired, `false` otherwise.\n */\n get(status: null): boolean;\n\n /**\n * Callback when model is to be destroyed.\n * \n * @param callback - Function to call when model is destroyed.\n * @returns Function to cancel listener.\n */\n get(status: null, callback: () => void): () => void;\n\n get(arg1?: Model.Effect<this> | string | null, arg2?: boolean | Model.OnUpdate<this, any>){\n const self = this.is;\n\n if(typeof arg1 == \"function\"){\n let pending = new Set<Model.Event<this>>();\n\n return createEffect(self, (proxy) => {\n const cb = arg1.call(proxy, proxy, pending);\n\n return cb === null ? null : ((update) => {\n pending = PENDING_KEYS.get(self)!;\n if(typeof cb == \"function\")\n cb(update);\n })\n });\n }\n\n if(arg1 === undefined)\n return snapshot(self);\n\n if(typeof arg2 == \"function\")\n return addListener(self, arg2, arg1)\n\n return arg1 === null\n ? Object.isFrozen(STATE.get(self))\n : fetch(self, arg1, arg2);\n }\n\n /**\n * Get update in progress.\n *\n * @returns Promise which resolves object with updated values, `undefined` if there no update is pending.\n **/\n set(): PromiseLike<Model.Event<this>[]> | undefined;\n\n /**\n * Update mulitple properties at once. Merges argument with current state.\n * Properties which are not managed by this model will be ignored.\n * \n * @param assign - Object with properties to update.\n * @param silent - If an update does occur, listeners will not be refreshed automatically.\n * @returns Promise resolving an array of keys updated, `undefined` (immediately) if a noop.\n */\n set(assign: Model.Assign<this>, silent?: boolean): PromiseLike<Model.Event<this>[]> | undefined;\n\n /**\n * Push an update. This will not change the value of associated property.\n * \n * Useful where a property value internally has changed, but the object is the same.\n * For example: An array has pushed a new value, or a nested property is updated.\n * \n * You can also use this to dispatch arbitrary events.\n * Symbols are recommended as non-property events, however you can use any string.\n * If doing so, be sure to avoid collisions with property names! An easy way to do this is\n * to prefix an event with \"!\" and/or use dash-case. e.g. `set(\"!event\")` or `set(\"my-event\")`.\n * \n * @param key - Property or event to dispatch.\n * @returns Promise resolves an array of keys updated.\n */\n set(key: Model.Event<this>): PromiseLike<Model.Event<this>[]>;\n\n /**\n * Call a function when update occurs.\n * \n * Given function is called for every assignment (which changes value) or explicit `set`.\n * \n * To run logic on final value only, callback may return a function. Using the same\n * function for one or more events will ensure it is called only when events are settled.\n * \n * @param callback - Function to call when update occurs.\n * @returns Function to remove listener. Will return `true` if removed, `false` if inactive already.\n * \n */\n set(callback: Model.OnEvent<this>): () => boolean;\n\n /**\n * Call a function when a property is updated.\n * Unlike `get`, this calsl synchronously and will fire as many times as the property is updated.\n * \n * @param key - Property to watch for updates.\n * @param callback - Function to call when property is updated.\n */\n set(key: Model.Event<this> | null, callback: Model.OnEvent<this>): () => boolean;\n\n /**\n * Declare an end to updates. This event is final and will freeze state.\n * This event can be watched for as well, to run cleanup logic and internally will remove all listeners.\n * \n * @param status - `null` to end updates.\n */\n set(status: null): void;\n\n set(\n arg1?: Model.OnEvent<this> | Model.Assign<this> | Model.Event<this> | null,\n arg2?: boolean | Model.OnEvent<this>){\n\n const self = this.is;\n\n if(typeof arg1 == \"function\")\n return addListener(self, key => {\n if(typeof key == \"string\")\n return arg1.call(self, key, self);\n })\n \n if(typeof arg2 == \"function\")\n return addListener(self, key => {\n if(key === arg1)\n return arg2.call(self, key, self);\n });\n\n if(arg1 && typeof arg1 == \"object\"){\n const methods = METHODS.get(self.constructor as Model.Type)!;\n \n for(const key in arg1)\n if(methods.has(key))\n self[key as keyof this] = arg1[key] as any;\n else if(key in self)\n update(self, key, arg1[key], arg2 === true);\n }\n else\n event(self, arg1);\n\n return pending(self);\n }\n\n /**\n * Iterate over managed properties in this instance of Model.\n * Yeilds the key and current value for each property.\n */\n [Symbol.iterator](): Iterator<[string, unknown]> {\n return Object.entries(STATE.get(this.is)!)[Symbol.iterator]();\n }\n\n /**\n * Create and activate a new instance of this model.\n * \n * **Important** - Unlike `new this(...)` - this method also activates state.\n * \n * @param args - arguments sent to constructor\n */\n static new<T extends Model>(this: Model.Init<T>, ...args: Model.Args<T>){\n const instance = new this(...args);\n event(instance);\n return instance;\n }\n\n /**\n * Static equivalent of `x instanceof this`.\n * Determines if provided class is a subtype of this one.\n * If so, language server will make available all static\n * methods and properties of this class.\n */\n static is<T extends Model.Type>(this: T, maybe: unknown): maybe is T {\n return maybe === this || typeof maybe == \"function\" && maybe.prototype instanceof this;\n }\n\n /**\n * Register a callback to run when any instance of this Model is updated. \n */\n static on<T extends Model>(this: Model.Type<T>, listener: Model.OnEvent<T>){\n let notify = NOTIFY.get(this);\n\n if(!notify)\n NOTIFY.set(this, notify = new Set);\n\n notify.add(listener);\n\n return () => notify.delete(listener);\n }\n}\n\ndefine(Model.prototype, \"toString\", {\n value(){\n return ID.get(this.is);\n }\n});\n\ndefine(Model, \"toString\", {\n value(){\n return this.name;\n }\n});\n\n/** Apply instructions and inherited event listeners. Ensure class metadata is ready. */\nfunction prepare(model: Model){\n let T = model.constructor as Model.Type;\n\n if(T === Model)\n throw new Error(\"Cannot create base Model.\");\n\n const chain = [] as Model.Type[];\n let keys = new Set<string>();\n\n ID.set(model, `${T}-${uid()}`);\n\n while(T.name){\n for(const cb of NOTIFY.get(T) || [])\n addListener(model, cb);\n\n if(T === Model) break;\n else chain.unshift(T);\n\n T = Object.getPrototypeOf(T)\n }\n\n for(const type of chain){\n if(METHODS.has(type)){\n keys = METHODS.get(type)!;\n continue;\n }\n\n METHODS.set(type, keys = new Set(keys));\n\n for(const [key, { value }] of Object.entries(\n Object.getOwnPropertyDescriptors(type.prototype)\n )){\n if(!value || key == \"constructor\")\n continue;\n \n function bind(this: Model, method = value){\n const value = method.bind(this.is);\n \n METHOD.set(value, method);\n define(this.is, key, { value, writable: true });\n \n return value;\n }\n\n keys.add(key);\n define(type.prototype, key, { get: bind, set: bind });\n }\n }\n}\n\n/**\n * Apply model arguemnts, run callbacks and observe properties.\n * Accumulate and handle cleanup events.\n **/\nfunction init(model: Model, args: Model.Args){\n const methods = METHODS.get(model.constructor as Model.Type)!;\n const state = {} as Record<string | number | symbol, unknown>;\n\n STATE.set(model, state);\n\n args = args.flat().filter(arg => {\n if(typeof arg != \"string\")\n return true;\n\n ID.set(model, arg);\n });\n\n addListener(model, () => {\n if(!PARENT.has(model))\n PARENT.set(model, null);\n \n args.forEach((arg) => {\n const use = typeof arg == \"function\"\n ? arg.call(model, model)\n : arg as Model.Assign<Model>;\n\n if(use instanceof Promise)\n use.catch(err => {\n console.error(`Async error in constructor for ${model}:`);\n console.error(err);\n });\n else if(typeof use == \"function\")\n addListener(model, use, null)\n else if(typeof use == \"object\")\n for(const key in use)\n if(key in model || methods.has(key))\n model[key as keyof Model] = use[key] as any;\n });\n\n for(const key in model){\n const desc = Object.getOwnPropertyDescriptor(model, key)!;\n\n if(\"value\" in desc){\n update(model, key, desc.value, true);\n define(model, key, {\n configurable: false,\n get(){\n return watch(this, key, state[key]);\n },\n set(value){\n update(model, key, value);\n mayAdopt(model, value);\n }\n });\n }\n }\n\n addListener(model, () => {\n for(const [_, value] of model)\n if(value instanceof Model && PARENT.get(value) === model)\n value.set(null);\n \n Object.freeze(state);\n }, null);\n \n return null;\n });\n}\n\nfunction mayAdopt(parent: Model, child: unknown){\n if(child instanceof Model && !PARENT.has(child)){\n PARENT.set(child, parent);\n event(child);\n }\n}\n\nfunction fetch(subject: Model, property: string, required?: boolean){\n const state = STATE.get(subject)!;\n \n if(property in state || required === false){\n const value = state[property];\n\n if(value !== undefined || !required)\n return value;\n }\n\n const error = new Error(`${subject}.${property} is not yet available.`);\n const promise = new Promise<any>((resolve, reject) => {\n addListener(subject, key => {\n if(key === property){\n resolve(state[key]);\n return null;\n }\n\n if(key === null)\n reject(new Error(`${subject} is destroyed.`));\n });\n });\n\n throw Object.assign(promise, {\n toString: () => String(error),\n name: \"Suspense\",\n message: error.message,\n stack: error.stack\n });\n}\n\n/** Currently accumulating export. Stores real values of placeholder properties such as ref() or child models. */\nlet EXPORT: Map<any, any> | undefined;\n\nfunction snapshot<T extends Model>(model: T): Model.State<T> {\n const values = {} as any;\n let isNotRecursive;\n\n if(!EXPORT){\n isNotRecursive = true;\n EXPORT = new Map([[model, values]]);\n }\n\n for(let [key, value] of model){\n if(EXPORT.has(value))\n value = EXPORT.get(value);\n else if(value && typeof value == \"object\" && \"get\" in value && typeof value.get === \"function\")\n EXPORT.set(value, value = value.get());\n\n values[key] = value;\n }\n\n if(isNotRecursive)\n EXPORT = undefined;\n\n return Object.freeze(values);\n}\n\nfunction update<T>(\n subject: Model,\n key: string | number | symbol,\n value: T,\n arg?: boolean | Model.Setter<T>){\n\n const state = STATE.get(subject)!;\n\n if(Object.isFrozen(state))\n throw new Error(`Tried to update ${String(key)} but ${subject} is destroyed.`);\n\n const previous = state[key] as T;\n\n if(typeof arg == \"function\"){\n const out = arg.call(subject, value, previous);\n\n if(out === false)\n return false;\n\n if(typeof out == \"function\")\n value = out();\n }\n\n if(value === previous)\n return;\n\n state[key] = value;\n\n if(arg !== true)\n event(subject, key);\n\n return true;\n}\n\n/** Random alphanumberic of length 6; always starts with a letter. */\nfunction uid(){\n return (0.278 + Math.random() * 0.722).toString(36).substring(2, 8).toUpperCase();\n}\n\nexport {\n event,\n fetch,\n mayAdopt,\n METHOD,\n Model,\n PARENT,\n STATE,\n uid,\n update,\n}","import { Model, PARENT, define, uid } from './model';\n\nconst LOOKUP = new WeakMap<Model, Context | ((got: Context) => void)[]>();\nconst KEYS = new Map<symbol | Model.Type, symbol>();\n\nfunction key(T: Model.Type | symbol, upstream?: boolean): symbol {\n let K = KEYS.get(T);\n\n if(!K)\n KEYS.set(T, K = Symbol(\n typeof T == \"symbol\" ? \"get \" + T.description : String(T)\n ));\n \n return upstream ? key(K) : K;\n}\n\nfunction keys(from: Model.Type, upstream?: boolean){\n const keys = new Set<symbol>();\n\n do {\n keys.add(key(from, upstream));\n }\n while((from = Object.getPrototypeOf(from)) !== Model);\n\n return keys;\n}\n\ndeclare namespace Context {\n type Multiple<T extends Model> = {\n [key: string | number]: Model.Init<T> | T;\n };\n\n type Accept<T extends Model = Model> = T | Model.Init<T> | Multiple<T>;\n\n type Expect<T extends Model = Model> = (model: T) => (() => void) | void;\n}\n\ninterface Context {\n [key: symbol]: Model | Context.Expect | null | undefined;\n}\n\nclass Context {\n static get<T extends Model>(on: Model, callback: ((got: Context) => void)): void;\n static get<T extends Model>(on: Model): Context | undefined;\n static get(from: Model, callback?: (got: Context) => void){\n const waiting = LOOKUP.get(from);\n\n if(waiting instanceof Context){\n if(callback)\n callback(waiting);\n\n return waiting;\n }\n\n if(callback)\n if(waiting) \n waiting.push(callback);\n else \n LOOKUP.set(from, [callback]);\n }\n\n public id!: string;\n\n protected layer = new Map<string | number, Model | Model.Type>();\n protected cleanup = new Set<() => void>();\n\n constructor(inputs?: Context.Accept){\n if(inputs)\n this.include(inputs);\n }\n\n /** Run callback when a specified type is registered to a **child** context. */\n public has<T extends Model>(Type: Model.Type<T>, callback: (model: T) => void){\n define(this, key(Type, true), { value: callback, configurable: true });\n }\n\n /** Find specified type registered to a parent context. Returns undefined if none are found. */\n public get<T extends Model>(Type: Model.Type<T>, require: true): T;\n public get<T extends Model>(Type: Model.Type<T>, require?: boolean): T | undefined;\n public get<T extends Model>(Type: Model.Type<T>, require?: boolean){\n const result = this[key(Type)];\n\n if(result === null)\n throw new Error(`Did find ${Type} in context, but multiple were defined.`);\n\n if(result)\n return result as T;\n\n if(require)\n throw new Error(`Could not find ${Type} in context.`);\n }\n\n public push(inputs?: Context.Accept){\n const next = Object.create(this) as this;\n\n next.layer = new Map();\n next.cleanup = new Set();\n\n if(inputs)\n next.include(inputs);\n\n return next;\n }\n\n public pop(){\n for(const key of Object.getOwnPropertySymbols(this))\n delete (this as any)[key];\n\n this.cleanup.forEach(cb => cb());\n this.layer.clear();\n }\n\n public include<T extends Model>(\n inputs: Context.Accept<T>,\n forEach?: Context.Expect<T>\n ){\n const init = new Map<Model, boolean>();\n\n if(typeof inputs == \"function\" || inputs instanceof Model)\n inputs = { 0: inputs };\n\n Object.entries(inputs).forEach(([K, V]: [string, Model | Model.Init<Model>]) => {\n if(Model.is(V) || V instanceof Model){\n const exists = this.layer.get(K);\n \n if(!exists){\n const instance = this.add(V);\n \n this.layer.set(K, V)\n init.set(instance, true);\n }\n // Context must force-reset because inputs are no longer safe.\n else if(exists !== V){ \n this.pop();\n this.id = uid();\n this.include(inputs);\n }\n\n return;\n }\n\n throw new Error(\n `Context may only include instance or class \\`extends Model\\` but got ${\n K == '0' || K == V ? V : `${V} (as '${K}')`\n }.`\n );\n })\n\n for(const [model, explicit] of init){\n model.set();\n\n if(explicit && forEach)\n forEach(model as T);\n\n for(const [_key, value] of model)\n if(PARENT.get(value as Model) === model){\n this.add(value as Model, true);\n init.set(value as Model, false);\n }\n }\n }\n\n protected add<T extends Model>(\n input: T | Model.Init<T>,\n implicit?: boolean){\n\n let T: Model.Type<T>;\n let I: T;\n\n if(typeof input == \"function\"){\n Model.is(input);\n\n T = input;\n I = new input() as T;\n this.cleanup.add(() => I.set(null));\n }\n else {\n T = input.constructor as Model.Type<T>;\n I = input;\n }\n\n keys(T, true).forEach(K => {\n const expects = this[K] as Context.Expect | undefined;\n \n if(!expects)\n return;\n \n const callback = expects(I);\n \n if(callback)\n this.cleanup.add(callback);\n });\n\n keys(T).forEach(K => {\n const value = this.hasOwnProperty(K) ? null : I;\n\n if(value || this[K] !== I && !implicit)\n define(this, K, {\n configurable: true,\n value\n });\n });\n\n const waiting = LOOKUP.get(I);\n \n if(waiting instanceof Array)\n waiting.forEach(cb => cb(this));\n\n LOOKUP.set(I, this);\n\n return I;\n }\n}\n\nexport { Context }","import { watch } from '../control';\nimport { define, fetch, mayAdopt, Model, PARENT, STATE, update } from '../model';\n\nconst INSTRUCT = new Map<symbol, Model.Instruction>();\n\nfunction use <T> (instruction: Model.Instruction<T>): T extends void ? unknown : T;\n\nfunction use <T extends Model> (Type: Model.Init<T>, required: false): T | undefined;\n\nfunction use <T extends Model> (Type: Model.Init<T>, ready?: (i: T) => void): T;\n\nfunction use(\n arg1: Model.Init | Model.Instruction,\n arg2?: ((i: Model) => void) | boolean){\n\n const token = Symbol(\"instruction\");\n\n if(Model.is(arg1)){\n const type = arg1;\n\n arg1 = (key, subject) => {\n const value = new type();\n const desc: Model.Descriptor = { set };\n\n set(value);\n PARENT.set(value, subject);\n\n function set(next: Model | undefined){\n if(next ? !(next instanceof type) : arg2 !== false)\n throw new Error(`${subject}.${key} expected Model of type ${type} but got ${next && next.constructor}.`)\n \n update(subject, key, next);\n \n if(next && typeof arg2 == \"function\")\n arg2(next);\n \n return false;\n }\n \n return desc;\n }\n }\n\n INSTRUCT.set(token, arg1);\n return token;\n}\n\nModel.on((_, model) => {\n const state = STATE.get(model)!;\n\n for(const key in model){\n const { value } = Object.getOwnPropertyDescriptor(model, key)!;\n const instruction = INSTRUCT.get(value);\n\n if(!instruction){\n mayAdopt(model, value);\n continue;\n }\n\n INSTRUCT.delete(value);\n delete (model as any)[key];\n\n const output = instruction.call(model, key, model, state);\n\n if(!output)\n continue;\n\n const desc = typeof output == \"object\" ? output : { get: output };\n\n if(\"value\" in desc)\n state[key] = desc.value;\n\n define(model, key, {\n enumerable: desc.enumerable !== false,\n get(this: Model){\n return watch(this, key, \n typeof desc.get == \"function\"\n ? desc.get(this)\n : fetch(model, key, desc.get)\n );\n },\n set(next){\n if(desc.set === false)\n throw new Error(`${model}.${key} is read-only.`);\n\n update(model, key, next, desc.set);\n }\n })\n }\n\n return null;\n});\n\nexport { use }","import { Context } from '../context';\nimport { createEffect } from '../control';\nimport { fetch, METHOD, Model, PARENT, event, update } from '../model';\nimport { use } from './use';\n\ntype Type<T extends Model> = Model.Type<T> & typeof Model;\n\nconst STALE = new WeakSet<() => void>();\n\ndeclare namespace get {\n type Compute<T, S = any> = (on: S, key: string) => T;\n\n type Factory<T, S = any> = (this: S, key: string, thisArg: S) => T;\n\n type Source<T extends Model = Model> = (resolve: (x: T) => void) => void;\n\n type Effect<T> = (model: T, key: string) => (() => void) | void;\n}\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Type - Type of controller compatible with this class. \n * @param expectParent - If true, will throw if Model is created without a parent.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, asParent?: true): T;\n\n/**\n * Fetches and assigns the controller which spawned this host.\n * When parent assigns an instance via `use()` directive, it\n * will be made available to child upon this request.\n *\n * @param Type - Type of controller compatible with this class. \n * @param required - If false, property may be undefined. Otherwise will throw suspense.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, required?: false): T | undefined;\n\n/**\n * Implement a computed value from a foreign model. Output will be generated by provided function,\n * where the foreign model will be passed to that function.\n * \n * @param source - Type of Model to fetch for computation.\n * @param compute - Compute function. Will update automatically as input values change.\n */\nfunction get <T extends Model> (Type: Model.Type<T>, effect: get.Effect<T>): T;\n\n/**\n * Implement a computed value; output will be generated by provided function.\n *\n * @param source - Source model from which computed value will be a subscriber.\n * @param compute - Compute function. Bound to a subscriber-proxy of source, returns output value. Will update automatically as input values change.\n */\nfunction get <R, T extends Model> (source: T, compute: get.Compute<R, T>): R;\n\n/**\n * Implement a computed value; output is returned by function from provided factory.\n * \n * Factory is bound to owner of property.\n *\n * @param compute - Factory function to generate a getter to subscribe dependancies.\n */\nfunction get <R, T> (compute: get.Factory<R, T>): R;\n \nfunction get<R, T extends Model>(\n arg0: T | get.Factory<R, T> | Type<T>,\n arg1?: Function | boolean){\n\n return use((key, subject, state) => {\n if(typeof arg0 == \"symbol\")\n throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`)\n\n if(Model.is(arg0)){\n const hasParent = PARENT.get(subject) as T;\n\n // TODO: notify on discovered context \n function assign(value: T) {\n if (typeof arg1 == \"function\")\n value.get(x => (arg1 as Function)(x, key));\n\n update(subject, key, value);\n }\n\n if(!hasParent){\n if(arg1 === true)\n throw new Error(`${subject} may only exist as a child of type ${arg0}.`);\n\n Context.get(subject, (context) => {\n const model = context.get(arg0);\n\n if(model)\n assign(model);\n else if(arg1 !== false)\n throw new Error(`Required ${arg0} not found in context for ${subject}.`)\n });\n }\n else if(!arg0 || hasParent instanceof arg0)\n assign(hasParent);\n else\n throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);\n\n return {\n get: arg1 !== false\n };\n }\n \n let from = subject;\n \n if(arg0 instanceof Model){\n from = arg0;\n }\n else {\n const fn = METHOD.get(arg0) || arg0;\n arg1 = ((p, k) => fn.call(p, k, p)) as get.Effect<T>;\n }\n\n const source: get.Source<T> = resolve => resolve(from);\n const getter = arg1 as get.Compute<R, T>;\n\n let reset: (() => void) | undefined;\n let isAsync: boolean;\n let proxy: any;\n\n function connect(model: Model){\n reset = createEffect(model, current => {\n proxy = current;\n\n if(!(key in state) || STALE.delete(compute))\n compute(!reset);\n\n return (didUpdate) => {\n if(didUpdate){\n STALE.add(compute);\n event(subject, key, true);\n }\n };\n }, false)\n }\n\n function compute(initial?: boolean){\n let next: R | undefined;\n\n try {\n next = getter.call(proxy, proxy, key);\n }\n catch(err){\n console.warn(`An exception was thrown while ${initial ? \"initializing\" : \"refreshing\"} ${subject}.${key}.`)\n\n if(initial)\n throw err;\n\n console.error(err);\n }\n\n update(subject, key, next, !isAsync);\n }\n\n return () => {\n if(!proxy){\n source(connect);\n isAsync = true;\n }\n\n if(STALE.delete(compute))\n compute();\n\n return fetch(subject, key, !proxy) as T;\n }\n })\n}\n\nexport { get };","import { context } from '../control';\nimport { Model, define, update } from '../model';\nimport { use } from './use';\n\ndeclare namespace ref {\n type Callback<T> = (argument: T) =>\n ((next: T | null) => void) | Promise<void> | void | boolean;\n\n interface Object<T = any> {\n (next: T | null): void;\n\n /** Current value held by this reference. */\n current: T | null;\n\n /** Retrieve current value. */\n get(): T | null;\n }\n\n /** Object with references to all managed values of `T`. */\n\n /** Object with references to all managed values of `T`. */\n type Proxy<T extends Model> =\n & { [P in Model.Field<T>]-?: Object<T[P]> }\n & { get(): T };\n\n type CustomProxy<T extends Model, R> =\n & { [P in Model.Field<T>]-?: R }\n & { get(): T };\n}\n\n/**\n * Creates an object with references to all managed values.\n * Each property is a function to set value in state when invoked.\n *\n * *Properties are simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param target - Source model from which to reference values.\n */\nfunction ref <T extends Model> (target: T): ref.Proxy<T>;\n\n/**\n * Creates an object with values based on managed values.\n * Each property will invoke mapper function on first access supply\n * the its return value going forward.\n *\n * @param target - Source model from which to reference values.\n * @param mapper - Function producing the placeholder value for any given property.\n */\nfunction ref <O extends Model, R>\n (target: O, mapper: (key: Model.Field<O>) => R): ref.CustomProxy<O, R>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n */\nfunction ref <T> (callback?: ref.Callback<T>): ref.Object<T>;\n\n/**\n * Creates a ref-compatible property.\n * Will persist value, and updates to this are made part of controller event-stream.\n *\n * *Output is simultaneously a ref-function and ref-object, use as needed.*\n *\n * @param callback - Optional callback to synchronously fire when reference is first set or does update.\n * @param ignoreNull - Default `true`. If `false`, will still callback with `null`.\n */\nfunction ref <T> (callback: ref.Callback<T | null>, ignoreNull: boolean): ref.Object<T>;\n\nfunction ref<T>(\n arg?: ref.Callback<T> | Model,\n arg2?: ((key: string) => any) | boolean){\n\n return use<T>((key, subject, state) => {\n let value = {};\n\n if(arg === subject)\n subject.get(() => {\n for(const key in state)\n if(typeof arg2 == \"function\")\n define(value, key, {\n configurable: true,\n get(){\n const out = arg2(key);\n define(value, key, { value: out });\n return out;\n }\n })\n else {\n const get = () => state[key];\n const set = (value: unknown) => {\n update(subject, key, value)\n };\n \n define(set, \"current\", { get, set });\n define(set, \"get\", { value: get });\n define(value, key, { value: set });\n }\n })\n\n else if(typeof arg == \"object\")\n throw new Error(\"ref instruction does not support object which is not 'this'\");\n\n else {\n let unset: ((next: T) => void) | undefined;\n\n const get = () => state[key];\n const set = (value?: any) => {\n if(!update(subject, key, value) || !arg)\n return;\n\n if(unset)\n unset = void unset(value);\n \n if(value === null && arg2 !== false)\n return;\n\n const ctx = context();\n const out = arg.call(subject, value);\n const flush = ctx();\n\n unset = key => {\n if(typeof out == \"function\")\n out(key);\n\n flush();\n }\n };\n \n state[key] = null;\n value = Object.defineProperties(set, {\n current: { get, set },\n get: { value: get }\n }) as ref.Object<T>;\n }\n\n define(subject, key, { value });\n })\n}\n\nexport { ref }","import { context } from '../control';\nimport { Model, event, update } from '../model';\nimport { use } from './use';\n\ndeclare namespace set {\n type Callback<T, S = any> = (this: S, next: T, previous: T) =>\n ((next: T) => void) | Promise<any> | void | boolean;\n\n type Factory<T, S = any> = (this: S, key: string) => Promise<T> | T;\n}\n\n/**\n * Set property as `undefined` but required.\n * \n * Property cannot be accessed until it is defined. If accessed while undefined, a hybrid\n * `Promise`/`Error` (aka: [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html)) will be thrown.\n */\nfunction set <T = any>(): T;\n\n/**\n * Set property with a factory function.\n * \n * Run factory only if/when accessed. Value will be undefined until\n * factory resolves, which will also dispatch an update for the property.\n */\nfunction set <T> (factory: set.Factory<T> | Promise<T>, required: false): T | undefined;\n\n/**\n * Set property with a factory function.\n *\n * If async, property cannot be accessed until resolves, yeilding a result.\n * If accessed while still processing, React Suspense will be thrown.\n *\n * @param factory - Callback run to derrive property value.\n * @param required - If true run factory immediately on creation, otherwise on access.\n */\nfunction set <T> (factory: set.Factory<T> | Promise<T>, required?: boolean): T;\n\n/**\n * Set a property with empty placeholder and/or update callback.\n * \n * @param value - Starting value for property. If undefined, suspense will be thrown on access, until value is set and accepted by callback.\n * @param onUpdate - Callback run when property is set. If returns false, update is not accepted and property will keep previous value.\n */\nfunction set <T> (value: T | undefined, onUpdate?: set.Callback<T>): T;\n\nfunction set <T> (\n value?: set.Factory<T> | Promise<T> | T,\n argument?: set.Callback<any> | boolean){\n\n return use<T>((key, subject) => {\n const property: Model.Descriptor = {};\n\n if(typeof value == \"function\" || value instanceof Promise){\n function init(){\n if(typeof value == \"function\")\n try {\n value = attempt(value.bind(subject, key));\n }\n catch(err){\n console.warn(`Generating initial value for ${subject}.${key} failed.`);\n throw err;\n }\n\n property.get = argument === true;\n\n if(value instanceof Promise){\n value\n .then(value => {\n update(subject, key, value);\n return value;\n })\n .catch(err => {\n event(subject, key);\n property.get = () => { throw err };\n })\n }\n else\n update(subject, key, value);\n\n if(0 in arguments)\n return subject[key];\n }\n\n if(argument)\n init();\n else\n property.get = init;\n }\n else if(value !== undefined)\n property.value = value;\n\n if(typeof argument == \"function\"){\n let unset: ((next: T) => void) | undefined;\n\n property.set = function(this: any, value: any, previous: any){\n const ctx = context();\n const out = argument.call(this, value, previous);\n const flush = ctx();\n\n if(out === false)\n return out;\n\n if(typeof unset == \"function\")\n unset(value);\n\n unset = (next: T) => {\n if(typeof out == \"function\")\n out(next);\n\n flush();\n }\n }\n }\n else\n property.set = value => {\n property.get = undefined;\n update(subject, key, value);\n }\n\n return property;\n })\n}\n\nfunction attempt(fn: () => any): any {\n function retry(err: unknown){\n if(err instanceof Promise)\n return err.then(compute);\n else\n throw err;\n }\n\n function compute(): any {\n try {\n const output = fn();\n\n return output instanceof Promise\n ? output.catch(retry)\n : output;\n }\n catch(err){\n return retry(err);\n }\n }\n\n return compute();\n}\n\nexport { set }","import { Context } from '../context';\nimport { Model, update } from '../model';\nimport { use } from './use';\n\nconst APPLY = new WeakMap<Model, (model: Model) => (() => void) | boolean | void>();\n\ndeclare namespace has {\n type Callback<T = any> = (model: T, recipient: Model) => void | boolean | (() => void);\n}\n\nfunction has <T extends Model> (type: Model.Type<T>, callback?: has.Callback<T>): readonly T[];\nfunction has (callback?: has.Callback): readonly Model[];\n \nfunction has <T extends Model> (\n arg1?: Model.Type<T> | has.Callback<Model>,\n arg2?: has.Callback<T>){\n\n return use<T[]>((key, subject) => {\n const applied = new Set<Model>();\n const apply = () => {\n update(subject, key, Object.freeze(Array.from(applied)));\n }\n\n if(Model.is(arg1))\n Context.get(subject, context => {\n context.has(arg1, model => {\n let remove: (() => void) | void | undefined;\n let disconnect: (() => void) | undefined;\n \n if(applied.has(model))\n return;\n \n const callback = APPLY.get(model);\n \n if(callback){\n const after = callback(subject);\n \n if(after === false)\n return;\n \n if(typeof after == \"function\")\n disconnect = after;\n }\n \n if(typeof arg2 == \"function\"){\n const done = arg2(model, subject);\n \n if(done === false)\n return false;\n \n remove = () => {\n if(typeof done == \"function\")\n done();\n }\n }\n \n applied.add(model);\n apply();\n \n const done = () => { \n ignore();\n \n applied.delete(model);\n apply();\n \n if(disconnect)\n disconnect();\n \n if(typeof remove == \"function\")\n remove();\n }\n \n const ignore = model.set(null, done);\n \n return done;\n })\n });\n else {\n if(APPLY.has(subject))\n throw new Error(`'has' callback can only be used once per model.`);\n\n APPLY.set(subject, recipient => {\n let remove: (() => void) | boolean | void;\n\n if(arg1){\n remove = arg1(recipient, subject);\n \n if(remove === false)\n return false;\n }\n\n applied.add(recipient);\n apply();\n\n return () => {\n applied.delete(recipient);\n apply();\n\n if(typeof remove == \"function\")\n remove();\n }\n });\n }\n\n return { value: [] };\n })\n}\n\nexport { has }"],"mappings":"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","names":["key","pending","res","event","listeners","pending","update","key","keys","bind","value","use","keys","require","key","init","key","set","key","assign","context","key","get","set","value","key","init","value","key","context","done"]}
|
package/package.json
CHANGED