@expressive/mvc 0.72.0 → 0.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,62 @@
1
+ import { State } from "./state.js";
2
+
3
+ //#region src/context.d.ts
4
+ declare namespace Context {
5
+ type Multiple<T extends State> = {
6
+ [key: string | number]: State.Type<T> | T;
7
+ };
8
+ type Accept<T extends State = State> = T | State.Type<T> | Multiple<T>;
9
+ type Expect<T extends State = State> = (state: T) => (() => void) | void;
10
+ }
11
+ interface Context {
12
+ [key: symbol]: State | Context.Expect | null | undefined;
13
+ }
14
+ declare class Context {
15
+ /**
16
+ * Get the context for a specified State. If a callback is provided, it will be run when
17
+ * the context becomes available.
18
+ */
19
+ static get<T extends State>(on: State, callback: (got: Context) => void): void;
20
+ /**
21
+ * Get the context for a specified State. Returns undefined if none are found.
22
+ */
23
+ static get<T extends State>(on: State): Context | undefined;
24
+ id: string;
25
+ protected inputs: Record<string | number, State | State.Extends>;
26
+ protected cleanup: Set<() => void>;
27
+ constructor(inputs?: Context.Accept);
28
+ /** Find specified type registered to a parent context. Throws if none are found. */
29
+ get<T extends State>(Type: State.Extends<T>, require: true): T;
30
+ /** Find specified type registered to a parent context. Returns undefined if none are found. */
31
+ get<T extends State>(Type: State.Extends<T>, require?: boolean): T | undefined;
32
+ /** Run callback when a specified type is registered in context downstream. */
33
+ get<T extends State>(Type: State.Extends<T>, callback: (state: T) => void): () => void;
34
+ /**
35
+ * Adds a State to this context.
36
+ */
37
+ protected add<T extends State>(input: T | State.Type<T>, implicit?: boolean): T;
38
+ /**
39
+ * Register one or more States to this context.
40
+ *
41
+ * Context will add or remove States as needed to keep with provided input.
42
+ *
43
+ * @param inputs State, State class, or map of States / State classes to register.
44
+ * @param forEach Optional callback to run for each State registered.
45
+ */
46
+ use<T extends State>(inputs: Context.Accept<T>, forEach?: Context.Expect<T>): void;
47
+ /**
48
+ * Create a child context, optionally registering one or more States to it.
49
+ *
50
+ * @param inputs State, State class, or map of States / State classes to register.
51
+ */
52
+ push(inputs?: Context.Accept): this;
53
+ /**
54
+ * Remove all States from this context.
55
+ *
56
+ * Will also run any cleanup callbacks registered when States were added.
57
+ */
58
+ pop(): void;
59
+ }
60
+ //#endregion
61
+ export { Context };
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL3N0YXRlJztcbmRlY2xhcmUgbmFtZXNwYWNlIENvbnRleHQge1xuICAgIHR5cGUgTXVsdGlwbGU8VCBleHRlbmRzIFN0YXRlPiA9IHtcbiAgICAgICAgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogU3RhdGUuVHlwZTxUPiB8IFQ7XG4gICAgfTtcbiAgICB0eXBlIEFjY2VwdDxUIGV4dGVuZHMgU3RhdGUgPSBTdGF0ZT4gPSBUIHwgU3RhdGUuVHlwZTxUPiB8IE11bHRpcGxlPFQ+O1xuICAgIHR5cGUgRXhwZWN0PFQgZXh0ZW5kcyBTdGF0ZSA9IFN0YXRlPiA9IChzdGF0ZTogVCkgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cbmludGVyZmFjZSBDb250ZXh0IHtcbiAgICBba2V5OiBzeW1ib2xdOiBTdGF0ZSB8IENvbnRleHQuRXhwZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cbmRlY2xhcmUgY2xhc3MgQ29udGV4dCB7XG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBjb250ZXh0IGZvciBhIHNwZWNpZmllZCBTdGF0ZS4gSWYgYSBjYWxsYmFjayBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSBydW4gd2hlblxuICAgICAqIHRoZSBjb250ZXh0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXQ8VCBleHRlbmRzIFN0YXRlPihvbjogU3RhdGUsIGNhbGxiYWNrOiAoZ290OiBDb250ZXh0KSA9PiB2b2lkKTogdm9pZDtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGNvbnRleHQgZm9yIGEgc3BlY2lmaWVkIFN0YXRlLiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4ob246IFN0YXRlKTogQ29udGV4dCB8IHVuZGVmaW5lZDtcbiAgICBpZDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBpbnB1dHM6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFN0YXRlIHwgU3RhdGUuRXh0ZW5kcz47XG4gICAgcHJvdGVjdGVkIGNsZWFudXA6IFNldDwoKSA9PiB2b2lkPjtcbiAgICBjb25zdHJ1Y3RvcihpbnB1dHM/OiBDb250ZXh0LkFjY2VwdCk7XG4gICAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBUaHJvd3MgaWYgbm9uZSBhcmUgZm91bmQuICovXG4gICAgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oVHlwZTogU3RhdGUuRXh0ZW5kczxUPiwgcmVxdWlyZTogdHJ1ZSk6IFQ7XG4gICAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC4gKi9cbiAgICBnZXQ8VCBleHRlbmRzIFN0YXRlPihUeXBlOiBTdGF0ZS5FeHRlbmRzPFQ+LCByZXF1aXJlPzogYm9vbGVhbik6IFQgfCB1bmRlZmluZWQ7XG4gICAgLyoqIFJ1biBjYWxsYmFjayB3aGVuIGEgc3BlY2lmaWVkIHR5cGUgaXMgcmVnaXN0ZXJlZCBpbiBjb250ZXh0IGRvd25zdHJlYW0uICovXG4gICAgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oVHlwZTogU3RhdGUuRXh0ZW5kczxUPiwgY2FsbGJhY2s6IChzdGF0ZTogVCkgPT4gdm9pZCk6ICgpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQWRkcyBhIFN0YXRlIHRvIHRoaXMgY29udGV4dC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkPFQgZXh0ZW5kcyBTdGF0ZT4oaW5wdXQ6IFQgfCBTdGF0ZS5UeXBlPFQ+LCBpbXBsaWNpdD86IGJvb2xlYW4pOiBUO1xuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIG9uZSBvciBtb3JlIFN0YXRlcyB0byB0aGlzIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBDb250ZXh0IHdpbGwgYWRkIG9yIHJlbW92ZSBTdGF0ZXMgYXMgbmVlZGVkIHRvIGtlZXAgd2l0aCBwcm92aWRlZCBpbnB1dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnB1dHMgU3RhdGUsIFN0YXRlIGNsYXNzLCBvciBtYXAgb2YgU3RhdGVzIC8gU3RhdGUgY2xhc3NlcyB0byByZWdpc3Rlci5cbiAgICAgKiBAcGFyYW0gZm9yRWFjaCBPcHRpb25hbCBjYWxsYmFjayB0byBydW4gZm9yIGVhY2ggU3RhdGUgcmVnaXN0ZXJlZC5cbiAgICAgKi9cbiAgICB1c2U8VCBleHRlbmRzIFN0YXRlPihpbnB1dHM6IENvbnRleHQuQWNjZXB0PFQ+LCBmb3JFYWNoPzogQ29udGV4dC5FeHBlY3Q8VD4pOiB2b2lkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGNoaWxkIGNvbnRleHQsIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgb25lIG9yIG1vcmUgU3RhdGVzIHRvIGl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlucHV0cyBTdGF0ZSwgU3RhdGUgY2xhc3MsIG9yIG1hcCBvZiBTdGF0ZXMgLyBTdGF0ZSBjbGFzc2VzIHRvIHJlZ2lzdGVyLlxuICAgICAqL1xuICAgIHB1c2goaW5wdXRzPzogQ29udGV4dC5BY2NlcHQpOiB0aGlzO1xuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbGwgU3RhdGVzIGZyb20gdGhpcyBjb250ZXh0LlxuICAgICAqXG4gICAgICogV2lsbCBhbHNvIHJ1biBhbnkgY2xlYW51cCBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aGVuIFN0YXRlcyB3ZXJlIGFkZGVkLlxuICAgICAqL1xuICAgIHBvcCgpOiB2b2lkO1xufVxuZXhwb3J0IHsgQ29udGV4dCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFBLFVBQVE7Q0FBQTtFQUFVLE1BQUE7RUFBQTtFQUFRO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksVUFBSztDQUFBO09BQVcsQ0FBQSxPQUFRLFFBQVMsT0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JDLElBQUksVUFBVTtDQUFBO0VBQUEsTUFBUztFQUFBO0VBQVE7RUFBTztFQUFTO0VBQUU7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLFFBQUE7RUFBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBIn0=
@@ -1,170 +1,158 @@
1
- import { addListener } from "./control";
2
- import { event, State, PARENT, uid } from "./state";
1
+ import { addListener, event } from "./observable.js";
2
+ import { PARENT, State, uid } from "./state.js";
3
+
4
+ //#region src/context.ts
3
5
  const LOOKUP = /* @__PURE__ */ new WeakMap();
4
6
  const KEYS = /* @__PURE__ */ new Map();
5
7
  function key(T, upstream) {
6
- let K = KEYS.get(T);
7
- if (!K) {
8
- K = Symbol(typeof T == "symbol" ? "get " + T.description : String(T));
9
- KEYS.set(T, K);
10
- }
11
- return upstream ? key(K) : K;
8
+ let K = KEYS.get(T);
9
+ if (!K) {
10
+ K = Symbol(typeof T == "symbol" ? "get " + T.description : String(T));
11
+ KEYS.set(T, K);
12
+ }
13
+ return upstream ? key(K) : K;
12
14
  }
13
15
  function keys(from, upstream) {
14
- const keys2 = /* @__PURE__ */ new Set();
15
- do {
16
- keys2.add(key(from, upstream));
17
- from = Object.getPrototypeOf(from);
18
- } while (from !== State);
19
- return keys2;
16
+ const keys = /* @__PURE__ */ new Set();
17
+ do {
18
+ keys.add(key(from, upstream));
19
+ from = Object.getPrototypeOf(from);
20
+ } while (from !== State);
21
+ return keys;
20
22
  }
21
- class Context {
22
- constructor(inputs) {
23
- this.id = uid();
24
- this.inputs = {};
25
- this.cleanup = /* @__PURE__ */ new Set();
26
- if (inputs) this.use(inputs);
27
- }
28
- static get({ is }, callback) {
29
- const context = LOOKUP.get(is);
30
- if (context instanceof Context) {
31
- if (callback) callback(context);
32
- return context;
33
- }
34
- if (callback)
35
- if (context) context.push(callback);
36
- else LOOKUP.set(is, [callback]);
37
- }
38
- get(Type, arg2) {
39
- if (typeof arg2 == "function") {
40
- const k = key(Type, true);
41
- Object.defineProperty(this, k, {
42
- value: arg2,
43
- configurable: true
44
- });
45
- return () => {
46
- delete this[k];
47
- };
48
- }
49
- const result = this[key(Type)];
50
- if (result === null)
51
- throw new Error(
52
- `Did find ${Type} in context, but multiple were defined.`
53
- );
54
- if (result) return result;
55
- if (arg2) throw new Error(`Could not find ${Type} in context.`);
56
- }
57
- /**
58
- * Adds a State to this context.
59
- */
60
- add(input, implicit) {
61
- const cleanup = /* @__PURE__ */ new Set();
62
- let T;
63
- let I;
64
- if (typeof input == "function") {
65
- T = input;
66
- I = new input();
67
- } else {
68
- T = input.constructor;
69
- I = input;
70
- }
71
- keys(T, true).forEach((K) => {
72
- const expects = this[K];
73
- if (expects)
74
- addListener(I, (event2) => {
75
- if (event2 === true) {
76
- const cb = expects(I);
77
- if (cb) cleanup.add(cb);
78
- }
79
- return null;
80
- });
81
- });
82
- keys(T).forEach((K) => {
83
- const value = this.hasOwnProperty(K) ? null : I;
84
- if (value || this[K] !== I && !implicit)
85
- Object.defineProperty(this, K, {
86
- configurable: true,
87
- value
88
- });
89
- });
90
- this.cleanup.add(() => {
91
- cleanup.forEach((cb) => cb());
92
- if (I !== input) event(I, null);
93
- });
94
- const waiting = LOOKUP.get(I);
95
- if (waiting instanceof Array) waiting.forEach((cb) => cb(this));
96
- LOOKUP.set(I, this);
97
- return I;
98
- }
99
- /**
100
- * Register one or more States to this context.
101
- *
102
- * Context will add or remove States as needed to keep with provided input.
103
- *
104
- * @param inputs State, State class, or map of States / State classes to register.
105
- * @param forEach Optional callback to run for each State registered.
106
- */
107
- use(inputs, forEach) {
108
- const init = /* @__PURE__ */ new Map();
109
- if (typeof inputs == "function" || inputs instanceof State)
110
- inputs = { [0]: inputs };
111
- for (const [K, V] of Object.entries(inputs)) {
112
- if (!(State.is(V) || V instanceof State))
113
- throw new Error(
114
- `Context may only include instance or class \`extends State\` but got ${K == "0" || K == String(V) ? V : `${V} (as '${K}')`}.`
115
- );
116
- const exists = this.inputs[K];
117
- if (!exists) {
118
- init.set(this.add(V), true);
119
- } else if (exists !== V) {
120
- this.pop();
121
- this.use(inputs);
122
- this.id = uid();
123
- return;
124
- }
125
- }
126
- for (const [state, explicit] of init) {
127
- state.set();
128
- if (explicit && forEach) forEach(state);
129
- for (const [_key, value] of state)
130
- if (PARENT.get(value) === state) {
131
- this.add(value, true);
132
- init.set(value, false);
133
- }
134
- }
135
- this.inputs = inputs;
136
- }
137
- /**
138
- * Create a child context, optionally registering one or more States to it.
139
- *
140
- * @param inputs State, State class, or map of States / State classes to register.
141
- */
142
- push(inputs) {
143
- const next = Object.create(this);
144
- this.cleanup = /* @__PURE__ */ new Set([() => next.pop(), ...this.cleanup]);
145
- next.inputs = {};
146
- next.cleanup = /* @__PURE__ */ new Set();
147
- if (inputs) next.use(inputs);
148
- return next;
149
- }
150
- /**
151
- * Remove all States from this context.
152
- *
153
- * Will also run any cleanup callbacks registered when States were added.
154
- */
155
- pop() {
156
- for (const key2 of Object.getOwnPropertySymbols(this)) delete this[key2];
157
- this.cleanup.forEach((cb) => cb());
158
- this.cleanup.clear();
159
- this.inputs = {};
160
- }
161
- }
162
- Object.defineProperty(Context.prototype, "toString", {
163
- value() {
164
- return `Context-${this.id}`;
165
- }
166
- });
167
- export {
168
- Context
23
+ var Context = class Context {
24
+ static get({ is }, callback) {
25
+ const context = LOOKUP.get(is);
26
+ if (context instanceof Context) {
27
+ if (callback) callback(context);
28
+ return context;
29
+ }
30
+ if (callback) if (context) context.push(callback);
31
+ else LOOKUP.set(is, [callback]);
32
+ }
33
+ constructor(inputs) {
34
+ this.id = uid();
35
+ this.inputs = {};
36
+ this.cleanup = /* @__PURE__ */ new Set();
37
+ if (inputs) this.use(inputs);
38
+ }
39
+ get(Type, arg2) {
40
+ if (typeof arg2 == "function") {
41
+ const k = key(Type, true);
42
+ Object.defineProperty(this, k, {
43
+ value: arg2,
44
+ configurable: true
45
+ });
46
+ return () => {
47
+ delete this[k];
48
+ };
49
+ }
50
+ const result = this[key(Type)];
51
+ if (result === null) throw new Error(`Did find ${Type} in context, but multiple were defined.`);
52
+ if (result) return result;
53
+ if (arg2) throw new Error(`Could not find ${Type} in context.`);
54
+ }
55
+ /**
56
+ * Adds a State to this context.
57
+ */
58
+ add(input, implicit) {
59
+ const cleanup = /* @__PURE__ */ new Set();
60
+ let T;
61
+ let I;
62
+ if (typeof input == "function") {
63
+ T = input;
64
+ I = new input();
65
+ } else {
66
+ T = input.constructor;
67
+ I = input;
68
+ }
69
+ keys(T, true).forEach((K) => {
70
+ const expects = this[K];
71
+ if (expects) addListener(I, (event) => {
72
+ if (event === true) {
73
+ const cb = expects(I);
74
+ if (cb) cleanup.add(cb);
75
+ }
76
+ return null;
77
+ });
78
+ });
79
+ keys(T).forEach((K) => {
80
+ const value = this.hasOwnProperty(K) ? null : I;
81
+ if (value || this[K] !== I && !implicit) Object.defineProperty(this, K, {
82
+ configurable: true,
83
+ value
84
+ });
85
+ });
86
+ this.cleanup.add(() => {
87
+ cleanup.forEach((cb) => cb());
88
+ if (I !== input) event(I, null);
89
+ });
90
+ const waiting = LOOKUP.get(I);
91
+ if (waiting instanceof Array) waiting.forEach((cb) => cb(this));
92
+ LOOKUP.set(I, this);
93
+ return I;
94
+ }
95
+ /**
96
+ * Register one or more States to this context.
97
+ *
98
+ * Context will add or remove States as needed to keep with provided input.
99
+ *
100
+ * @param inputs State, State class, or map of States / State classes to register.
101
+ * @param forEach Optional callback to run for each State registered.
102
+ */
103
+ use(inputs, forEach) {
104
+ const init = /* @__PURE__ */ new Map();
105
+ if (typeof inputs == "function" || inputs instanceof State) inputs = { [0]: inputs };
106
+ for (const [K, V] of Object.entries(inputs)) {
107
+ if (!(State.is(V) || V instanceof State)) throw new Error(`Context may only include instance or class \`extends State\` but got ${K == "0" || K == String(V) ? V : `${V} (as '${K}')`}.`);
108
+ const exists = this.inputs[K];
109
+ if (!exists) init.set(this.add(V), true);
110
+ else if (exists !== V) {
111
+ this.pop();
112
+ this.use(inputs);
113
+ this.id = uid();
114
+ return;
115
+ }
116
+ }
117
+ for (const [state, explicit] of init) {
118
+ state.set();
119
+ if (explicit && forEach) forEach(state);
120
+ for (const [_key, value] of state) if (PARENT.get(value) === state) {
121
+ this.add(value, true);
122
+ init.set(value, false);
123
+ }
124
+ }
125
+ this.inputs = inputs;
126
+ }
127
+ /**
128
+ * Create a child context, optionally registering one or more States to it.
129
+ *
130
+ * @param inputs State, State class, or map of States / State classes to register.
131
+ */
132
+ push(inputs) {
133
+ const next = Object.create(this);
134
+ this.cleanup = new Set([() => next.pop(), ...this.cleanup]);
135
+ next.inputs = {};
136
+ next.cleanup = /* @__PURE__ */ new Set();
137
+ if (inputs) next.use(inputs);
138
+ return next;
139
+ }
140
+ /**
141
+ * Remove all States from this context.
142
+ *
143
+ * Will also run any cleanup callbacks registered when States were added.
144
+ */
145
+ pop() {
146
+ for (const key of Object.getOwnPropertySymbols(this)) delete this[key];
147
+ this.cleanup.forEach((cb) => cb());
148
+ this.cleanup.clear();
149
+ this.inputs = {};
150
+ }
169
151
  };
170
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRleHQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGFkZExpc3RlbmVyIH0gZnJvbSAnLi9jb250cm9sJztcbmltcG9ydCB7IGV2ZW50LCBTdGF0ZSwgUEFSRU5ULCB1aWQgfSBmcm9tICcuL3N0YXRlJztcblxuY29uc3QgTE9PS1VQID0gbmV3IFdlYWtNYXA8U3RhdGUsIENvbnRleHQgfCAoKGdvdDogQ29udGV4dCkgPT4gdm9pZClbXT4oKTtcbmNvbnN0IEtFWVMgPSBuZXcgTWFwPHN5bWJvbCB8IFN0YXRlLkV4dGVuZHMsIHN5bWJvbD4oKTtcblxuZnVuY3Rpb24ga2V5KFQ6IFN0YXRlLkV4dGVuZHMgfCBzeW1ib2wsIHVwc3RyZWFtPzogYm9vbGVhbik6IHN5bWJvbCB7XG4gIGxldCBLID0gS0VZUy5nZXQoVCk7XG5cbiAgaWYgKCFLKSB7XG4gICAgSyA9IFN5bWJvbCh0eXBlb2YgVCA9PSAnc3ltYm9sJyA/ICdnZXQgJyArIFQuZGVzY3JpcHRpb24gOiBTdHJpbmcoVCkpO1xuICAgIEtFWVMuc2V0KFQsIEspO1xuICB9XG5cbiAgcmV0dXJuIHVwc3RyZWFtID8ga2V5KEspIDogSztcbn1cblxuZnVuY3Rpb24ga2V5cyhmcm9tOiBTdGF0ZS5FeHRlbmRzLCB1cHN0cmVhbT86IGJvb2xlYW4pIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3ltYm9sPigpO1xuXG4gIGRvIHtcbiAgICBrZXlzLmFkZChrZXkoZnJvbSwgdXBzdHJlYW0pKTtcbiAgICBmcm9tID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGZyb20pO1xuICB9IHdoaWxlIChmcm9tICE9PSBTdGF0ZSk7XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmRlY2xhcmUgbmFtZXNwYWNlIENvbnRleHQge1xuICB0eXBlIE11bHRpcGxlPFQgZXh0ZW5kcyBTdGF0ZT4gPSB7XG4gICAgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogU3RhdGUuQ2xhc3M8VD4gfCBUO1xuICB9O1xuXG4gIHR5cGUgQWNjZXB0PFQgZXh0ZW5kcyBTdGF0ZSA9IFN0YXRlPiA9IFQgfCBTdGF0ZS5DbGFzczxUPiB8IE11bHRpcGxlPFQ+O1xuXG4gIHR5cGUgRXhwZWN0PFQgZXh0ZW5kcyBTdGF0ZSA9IFN0YXRlPiA9IChzdGF0ZTogVCkgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuaW50ZXJmYWNlIENvbnRleHQge1xuICBba2V5OiBzeW1ib2xdOiBTdGF0ZSB8IENvbnRleHQuRXhwZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbn1cblxuY2xhc3MgQ29udGV4dCB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRleHQgZm9yIGEgc3BlY2lmaWVkIFN0YXRlLiBJZiBhIGNhbGxiYWNrIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHJ1biB3aGVuXG4gICAqIHRoZSBjb250ZXh0IGJlY29tZXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgU3RhdGU+KFxuICAgIG9uOiBTdGF0ZSxcbiAgICBjYWxsYmFjazogKGdvdDogQ29udGV4dCkgPT4gdm9pZFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRleHQgZm9yIGEgc3BlY2lmaWVkIFN0YXRlLiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC5cbiAgICovXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIFN0YXRlPihvbjogU3RhdGUpOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG4gIHN0YXRpYyBnZXQoeyBpcyB9OiBTdGF0ZSwgY2FsbGJhY2s/OiAoZ290OiBDb250ZXh0KSA9PiB2b2lkKSB7XG4gICAgY29uc3QgY29udGV4dCA9IExPT0tVUC5nZXQoaXMpO1xuXG4gICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKVxuICAgICAgaWYgKGNvbnRleHQpIGNvbnRleHQucHVzaChjYWxsYmFjayk7XG4gICAgICBlbHNlIExPT0tVUC5zZXQoaXMsIFtjYWxsYmFja10pO1xuICB9XG5cbiAgcHVibGljIGlkID0gdWlkKCk7XG5cbiAgcHJvdGVjdGVkIGlucHV0cyA9IHt9IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFN0YXRlIHwgU3RhdGUuRXh0ZW5kcz47XG4gIHByb3RlY3RlZCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0cz86IENvbnRleHQuQWNjZXB0KSB7XG4gICAgaWYgKGlucHV0cykgdGhpcy51c2UoaW5wdXRzKTtcbiAgfVxuXG4gIC8qKiBGaW5kIHNwZWNpZmllZCB0eXBlIHJlZ2lzdGVyZWQgdG8gYSBwYXJlbnQgY29udGV4dC4gVGhyb3dzIGlmIG5vbmUgYXJlIGZvdW5kLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oVHlwZTogU3RhdGUuRXh0ZW5kczxUPiwgcmVxdWlyZTogdHJ1ZSk6IFQ7XG5cbiAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub25lIGFyZSBmb3VuZC4gKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgU3RhdGU+KFxuICAgIFR5cGU6IFN0YXRlLkV4dGVuZHM8VD4sXG4gICAgcmVxdWlyZT86IGJvb2xlYW5cbiAgKTogVCB8IHVuZGVmaW5lZDtcblxuICAvKiogUnVuIGNhbGxiYWNrIHdoZW4gYSBzcGVjaWZpZWQgdHlwZSBpcyByZWdpc3RlcmVkIGluIGNvbnRleHQgZG93bnN0cmVhbS4gKi9cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgU3RhdGU+KFxuICAgIFR5cGU6IFN0YXRlLkV4dGVuZHM8VD4sXG4gICAgY2FsbGJhY2s6IChzdGF0ZTogVCkgPT4gdm9pZFxuICApOiAoKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIFN0YXRlPihcbiAgICBUeXBlOiBTdGF0ZS5FeHRlbmRzPFQ+LFxuICAgIGFyZzI/OiBib29sZWFuIHwgKChzdGF0ZTogVCkgPT4gdm9pZClcbiAgKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcyID09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGsgPSBrZXkoVHlwZSwgdHJ1ZSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICB2YWx1ZTogYXJnMixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tdO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzW2tleShUeXBlKV07XG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGlkIGZpbmQgJHtUeXBlfSBpbiBjb250ZXh0LCBidXQgbXVsdGlwbGUgd2VyZSBkZWZpbmVkLmBcbiAgICAgICk7XG5cbiAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0IGFzIFQ7XG5cbiAgICBpZiAoYXJnMikgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1R5cGV9IGluIGNvbnRleHQuYCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIFN0YXRlIHRvIHRoaXMgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhZGQ8VCBleHRlbmRzIFN0YXRlPihcbiAgICBpbnB1dDogVCB8IFN0YXRlLkNsYXNzPFQ+LFxuICAgIGltcGxpY2l0PzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCBjbGVhbnVwID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuICAgIGxldCBUOiBTdGF0ZS5FeHRlbmRzPFQ+O1xuICAgIGxldCBJOiBUO1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBUID0gaW5wdXQ7XG4gICAgICBJID0gbmV3IGlucHV0KCkgYXMgVDtcbiAgICB9IGVsc2Uge1xuICAgICAgVCA9IGlucHV0LmNvbnN0cnVjdG9yIGFzIFN0YXRlLkV4dGVuZHM8VD47XG4gICAgICBJID0gaW5wdXQ7XG4gICAgfVxuXG4gICAga2V5cyhULCB0cnVlKS5mb3JFYWNoKChLKSA9PiB7XG4gICAgICBjb25zdCBleHBlY3RzID0gdGhpc1tLXSBhcyBDb250ZXh0LkV4cGVjdCB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGV4cGVjdHMpXG4gICAgICAgIGFkZExpc3RlbmVyKEksIChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBleHBlY3RzKEkpO1xuICAgICAgICAgICAgaWYgKGNiKSBjbGVhbnVwLmFkZChjYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAga2V5cyhUKS5mb3JFYWNoKChLKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFzT3duUHJvcGVydHkoSykgPyBudWxsIDogSTtcblxuICAgICAgaWYgKHZhbHVlIHx8ICh0aGlzW0tdICE9PSBJICYmICFpbXBsaWNpdCkpXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBLLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jbGVhbnVwLmFkZCgoKSA9PiB7XG4gICAgICBjbGVhbnVwLmZvckVhY2goKGNiKSA9PiBjYigpKTtcbiAgICAgIGlmIChJICE9PSBpbnB1dCkgZXZlbnQoSSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB3YWl0aW5nID0gTE9PS1VQLmdldChJKTtcblxuICAgIGlmICh3YWl0aW5nIGluc3RhbmNlb2YgQXJyYXkpIHdhaXRpbmcuZm9yRWFjaCgoY2IpID0+IGNiKHRoaXMpKTtcblxuICAgIExPT0tVUC5zZXQoSSwgdGhpcyk7XG5cbiAgICByZXR1cm4gSTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBvbmUgb3IgbW9yZSBTdGF0ZXMgdG8gdGhpcyBjb250ZXh0LlxuICAgKlxuICAgKiBDb250ZXh0IHdpbGwgYWRkIG9yIHJlbW92ZSBTdGF0ZXMgYXMgbmVlZGVkIHRvIGtlZXAgd2l0aCBwcm92aWRlZCBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0cyBTdGF0ZSwgU3RhdGUgY2xhc3MsIG9yIG1hcCBvZiBTdGF0ZXMgLyBTdGF0ZSBjbGFzc2VzIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0gZm9yRWFjaCBPcHRpb25hbCBjYWxsYmFjayB0byBydW4gZm9yIGVhY2ggU3RhdGUgcmVnaXN0ZXJlZC5cbiAgICovXG4gIHB1YmxpYyB1c2U8VCBleHRlbmRzIFN0YXRlPihcbiAgICBpbnB1dHM6IENvbnRleHQuQWNjZXB0PFQ+LFxuICAgIGZvckVhY2g/OiBDb250ZXh0LkV4cGVjdDxUPlxuICApIHtcbiAgICBjb25zdCBpbml0ID0gbmV3IE1hcDxTdGF0ZSwgYm9vbGVhbj4oKTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXRzID09ICdmdW5jdGlvbicgfHwgaW5wdXRzIGluc3RhbmNlb2YgU3RhdGUpXG4gICAgICBpbnB1dHMgPSB7IFswXTogaW5wdXRzIH07XG5cbiAgICBmb3IgKGNvbnN0IFtLLCBWXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dHMpKSB7XG4gICAgICBpZiAoIShTdGF0ZS5pcyhWKSB8fCBWIGluc3RhbmNlb2YgU3RhdGUpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENvbnRleHQgbWF5IG9ubHkgaW5jbHVkZSBpbnN0YW5jZSBvciBjbGFzcyBcXGBleHRlbmRzIFN0YXRlXFxgIGJ1dCBnb3QgJHtcbiAgICAgICAgICAgIEsgPT0gJzAnIHx8IEsgPT0gU3RyaW5nKFYpID8gViA6IGAke1Z9IChhcyAnJHtLfScpYFxuICAgICAgICAgIH0uYFxuICAgICAgICApO1xuXG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmlucHV0c1tLXTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgaW5pdC5zZXQodGhpcy5hZGQoViksIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gQ29udGV4dCBtdXN0IGZvcmNlLXJlc2V0IGJlY2F1c2UgaW5wdXRzIGFyZSBubyBsb25nZXIgc2FmZSxcbiAgICAgIC8vIGhvd2V2ZXIgcHJvYmFibHkgc2hvdWxkIGRvIHRoYXQgb24gYSBwZXItc3RhdGUgYmFzaXMuXG4gICAgICBlbHNlIGlmIChleGlzdHMgIT09IFYpIHtcbiAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgdGhpcy51c2UoaW5wdXRzKTtcbiAgICAgICAgdGhpcy5pZCA9IHVpZCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbc3RhdGUsIGV4cGxpY2l0XSBvZiBpbml0KSB7XG4gICAgICBzdGF0ZS5zZXQoKTtcblxuICAgICAgaWYgKGV4cGxpY2l0ICYmIGZvckVhY2gpIGZvckVhY2goc3RhdGUgYXMgVCk7XG5cbiAgICAgIGZvciAoY29uc3QgW19rZXksIHZhbHVlXSBvZiBzdGF0ZSlcbiAgICAgICAgaWYgKFBBUkVOVC5nZXQodmFsdWUgYXMgU3RhdGUpID09PSBzdGF0ZSkge1xuICAgICAgICAgIHRoaXMuYWRkKHZhbHVlIGFzIFN0YXRlLCB0cnVlKTtcbiAgICAgICAgICBpbml0LnNldCh2YWx1ZSBhcyBTdGF0ZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dHMgPSBpbnB1dHM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2hpbGQgY29udGV4dCwgb3B0aW9uYWxseSByZWdpc3RlcmluZyBvbmUgb3IgbW9yZSBTdGF0ZXMgdG8gaXQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHMgU3RhdGUsIFN0YXRlIGNsYXNzLCBvciBtYXAgb2YgU3RhdGVzIC8gU3RhdGUgY2xhc3NlcyB0byByZWdpc3Rlci5cbiAgICovXG4gIHB1YmxpYyBwdXNoKGlucHV0cz86IENvbnRleHQuQWNjZXB0KSB7XG4gICAgY29uc3QgbmV4dCA9IE9iamVjdC5jcmVhdGUodGhpcykgYXMgdGhpcztcblxuICAgIHRoaXMuY2xlYW51cCA9IG5ldyBTZXQoWygpID0+IG5leHQucG9wKCksIC4uLnRoaXMuY2xlYW51cF0pO1xuXG4gICAgbmV4dC5pbnB1dHMgPSB7fTtcbiAgICBuZXh0LmNsZWFudXAgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAoaW5wdXRzKSBuZXh0LnVzZShpbnB1dHMpO1xuXG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBTdGF0ZXMgZnJvbSB0aGlzIGNvbnRleHQuXG4gICAqXG4gICAqIFdpbGwgYWxzbyBydW4gYW55IGNsZWFudXAgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2hlbiBTdGF0ZXMgd2VyZSBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBwb3AoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSkgZGVsZXRlIHRoaXNba2V5XTtcblxuICAgIHRoaXMuY2xlYW51cC5mb3JFYWNoKChjYikgPT4gY2IoKSk7XG4gICAgdGhpcy5jbGVhbnVwLmNsZWFyKCk7XG4gICAgdGhpcy5pbnB1dHMgPSB7fTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGV4dC5wcm90b3R5cGUsICd0b1N0cmluZycsIHtcbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGBDb250ZXh0LSR7dGhpcy5pZH1gO1xuICB9XG59KTtcblxuZXhwb3J0IHsgQ29udGV4dCB9O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FB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
152
+ Object.defineProperty(Context.prototype, "toString", { value() {
153
+ return `Context-${this.id}`;
154
+ } });
155
+
156
+ //#endregion
157
+ export { Context };
158
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRMaXN0ZW5lciB9IGZyb20gJy4vb2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBldmVudCwgU3RhdGUsIFBBUkVOVCwgdWlkIH0gZnJvbSAnLi9zdGF0ZSc7XG5cbmNvbnN0IExPT0tVUCA9IG5ldyBXZWFrTWFwPFN0YXRlLCBDb250ZXh0IHwgKChnb3Q6IENvbnRleHQpID0+IHZvaWQpW10+KCk7XG5jb25zdCBLRVlTID0gbmV3IE1hcDxzeW1ib2wgfCBTdGF0ZS5FeHRlbmRzLCBzeW1ib2w+KCk7XG5cbmZ1bmN0aW9uIGtleShUOiBTdGF0ZS5FeHRlbmRzIHwgc3ltYm9sLCB1cHN0cmVhbT86IGJvb2xlYW4pOiBzeW1ib2wge1xuICBsZXQgSyA9IEtFWVMuZ2V0KFQpO1xuXG4gIGlmICghSykge1xuICAgIEsgPSBTeW1ib2wodHlwZW9mIFQgPT0gJ3N5bWJvbCcgPyAnZ2V0ICcgKyBULmRlc2NyaXB0aW9uIDogU3RyaW5nKFQpKTtcbiAgICBLRVlTLnNldChULCBLKTtcbiAgfVxuXG4gIHJldHVybiB1cHN0cmVhbSA/IGtleShLKSA6IEs7XG59XG5cbmZ1bmN0aW9uIGtleXMoZnJvbTogU3RhdGUuRXh0ZW5kcywgdXBzdHJlYW0/OiBib29sZWFuKSB7XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN5bWJvbD4oKTtcblxuICBkbyB7XG4gICAga2V5cy5hZGQoa2V5KGZyb20sIHVwc3RyZWFtKSk7XG4gICAgZnJvbSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihmcm9tKTtcbiAgfSB3aGlsZSAoZnJvbSAhPT0gU3RhdGUpO1xuXG4gIHJldHVybiBrZXlzO1xufVxuXG5kZWNsYXJlIG5hbWVzcGFjZSBDb250ZXh0IHtcbiAgdHlwZSBNdWx0aXBsZTxUIGV4dGVuZHMgU3RhdGU+ID0ge1xuICAgIFtrZXk6IHN0cmluZyB8IG51bWJlcl06IFN0YXRlLlR5cGU8VD4gfCBUO1xuICB9O1xuXG4gIHR5cGUgQWNjZXB0PFQgZXh0ZW5kcyBTdGF0ZSA9IFN0YXRlPiA9IFQgfCBTdGF0ZS5UeXBlPFQ+IHwgTXVsdGlwbGU8VD47XG5cbiAgdHlwZSBFeHBlY3Q8VCBleHRlbmRzIFN0YXRlID0gU3RhdGU+ID0gKHN0YXRlOiBUKSA9PiAoKCkgPT4gdm9pZCkgfCB2b2lkO1xufVxuXG5pbnRlcmZhY2UgQ29udGV4dCB7XG4gIFtrZXk6IHN5bWJvbF06IFN0YXRlIHwgQ29udGV4dC5FeHBlY3QgfCBudWxsIHwgdW5kZWZpbmVkO1xufVxuXG5jbGFzcyBDb250ZXh0IHtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGV4dCBmb3IgYSBzcGVjaWZpZWQgU3RhdGUuIElmIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgcnVuIHdoZW5cbiAgICogdGhlIGNvbnRleHQgYmVjb21lcyBhdmFpbGFibGUuXG4gICAqL1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oXG4gICAgb246IFN0YXRlLFxuICAgIGNhbGxiYWNrOiAoZ290OiBDb250ZXh0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGV4dCBmb3IgYSBzcGVjaWZpZWQgU3RhdGUuIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kLlxuICAgKi9cbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgU3RhdGU+KG9uOiBTdGF0ZSk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cbiAgc3RhdGljIGdldCh7IGlzIH06IFN0YXRlLCBjYWxsYmFjaz86IChnb3Q6IENvbnRleHQpID0+IHZvaWQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gTE9PS1VQLmdldChpcyk7XG5cbiAgICBpZiAoY29udGV4dCBpbnN0YW5jZW9mIENvbnRleHQpIHtcbiAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soY29udGV4dCk7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spXG4gICAgICBpZiAoY29udGV4dCkgY29udGV4dC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgTE9PS1VQLnNldChpcywgW2NhbGxiYWNrXSk7XG4gIH1cblxuICBwdWJsaWMgaWQgPSB1aWQoKTtcblxuICBwcm90ZWN0ZWQgaW5wdXRzID0ge30gYXMgUmVjb3JkPHN0cmluZyB8IG51bWJlciwgU3RhdGUgfCBTdGF0ZS5FeHRlbmRzPjtcbiAgcHJvdGVjdGVkIGNsZWFudXAgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoaW5wdXRzPzogQ29udGV4dC5BY2NlcHQpIHtcbiAgICBpZiAoaW5wdXRzKSB0aGlzLnVzZShpbnB1dHMpO1xuICB9XG5cbiAgLyoqIEZpbmQgc3BlY2lmaWVkIHR5cGUgcmVnaXN0ZXJlZCB0byBhIHBhcmVudCBjb250ZXh0LiBUaHJvd3MgaWYgbm9uZSBhcmUgZm91bmQuICovXG4gIHB1YmxpYyBnZXQ8VCBleHRlbmRzIFN0YXRlPihUeXBlOiBTdGF0ZS5FeHRlbmRzPFQ+LCByZXF1aXJlOiB0cnVlKTogVDtcblxuICAvKiogRmluZCBzcGVjaWZpZWQgdHlwZSByZWdpc3RlcmVkIHRvIGEgcGFyZW50IGNvbnRleHQuIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vbmUgYXJlIGZvdW5kLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oXG4gICAgVHlwZTogU3RhdGUuRXh0ZW5kczxUPixcbiAgICByZXF1aXJlPzogYm9vbGVhblxuICApOiBUIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSdW4gY2FsbGJhY2sgd2hlbiBhIHNwZWNpZmllZCB0eXBlIGlzIHJlZ2lzdGVyZWQgaW4gY29udGV4dCBkb3duc3RyZWFtLiAqL1xuICBwdWJsaWMgZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oXG4gICAgVHlwZTogU3RhdGUuRXh0ZW5kczxUPixcbiAgICBjYWxsYmFjazogKHN0YXRlOiBUKSA9PiB2b2lkXG4gICk6ICgpID0+IHZvaWQ7XG5cbiAgcHVibGljIGdldDxUIGV4dGVuZHMgU3RhdGU+KFxuICAgIFR5cGU6IFN0YXRlLkV4dGVuZHM8VD4sXG4gICAgYXJnMj86IGJvb2xlYW4gfCAoKHN0YXRlOiBUKSA9PiB2b2lkKVxuICApIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgayA9IGtleShUeXBlLCB0cnVlKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgIHZhbHVlOiBhcmcyLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXNba107XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNba2V5KFR5cGUpXTtcblxuICAgIGlmIChyZXN1bHQgPT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEaWQgZmluZCAke1R5cGV9IGluIGNvbnRleHQsIGJ1dCBtdWx0aXBsZSB3ZXJlIGRlZmluZWQuYFxuICAgICAgKTtcblxuICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQgYXMgVDtcblxuICAgIGlmIChhcmcyKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7VHlwZX0gaW4gY29udGV4dC5gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgU3RhdGUgdG8gdGhpcyBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFkZDxUIGV4dGVuZHMgU3RhdGU+KGlucHV0OiBUIHwgU3RhdGUuVHlwZTxUPiwgaW1wbGljaXQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgY2xlYW51cCA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcbiAgICBsZXQgVDogU3RhdGUuRXh0ZW5kczxUPjtcbiAgICBsZXQgSTogVDtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgVCA9IGlucHV0O1xuICAgICAgSSA9IG5ldyBpbnB1dCgpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIFQgPSBpbnB1dC5jb25zdHJ1Y3RvciBhcyBTdGF0ZS5FeHRlbmRzPFQ+O1xuICAgICAgSSA9IGlucHV0O1xuICAgIH1cblxuICAgIGtleXMoVCwgdHJ1ZSkuZm9yRWFjaCgoSykgPT4ge1xuICAgICAgY29uc3QgZXhwZWN0cyA9IHRoaXNbS10gYXMgQ29udGV4dC5FeHBlY3QgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChleHBlY3RzKVxuICAgICAgICBhZGRMaXN0ZW5lcihJLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gZXhwZWN0cyhJKTtcbiAgICAgICAgICAgIGlmIChjYikgY2xlYW51cC5hZGQoY2IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGtleXMoVCkuZm9yRWFjaCgoSykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhc093blByb3BlcnR5KEspID8gbnVsbCA6IEk7XG5cbiAgICAgIGlmICh2YWx1ZSB8fCAodGhpc1tLXSAhPT0gSSAmJiAhaW1wbGljaXQpKVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgSywge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xlYW51cC5hZGQoKCkgPT4ge1xuICAgICAgY2xlYW51cC5mb3JFYWNoKChjYikgPT4gY2IoKSk7XG4gICAgICBpZiAoSSAhPT0gaW5wdXQpIGV2ZW50KEksIG51bGwpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgd2FpdGluZyA9IExPT0tVUC5nZXQoSSk7XG5cbiAgICBpZiAod2FpdGluZyBpbnN0YW5jZW9mIEFycmF5KSB3YWl0aW5nLmZvckVhY2goKGNiKSA9PiBjYih0aGlzKSk7XG5cbiAgICBMT09LVVAuc2V0KEksIHRoaXMpO1xuXG4gICAgcmV0dXJuIEk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgb25lIG9yIG1vcmUgU3RhdGVzIHRvIHRoaXMgY29udGV4dC5cbiAgICpcbiAgICogQ29udGV4dCB3aWxsIGFkZCBvciByZW1vdmUgU3RhdGVzIGFzIG5lZWRlZCB0byBrZWVwIHdpdGggcHJvdmlkZWQgaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHMgU3RhdGUsIFN0YXRlIGNsYXNzLCBvciBtYXAgb2YgU3RhdGVzIC8gU3RhdGUgY2xhc3NlcyB0byByZWdpc3Rlci5cbiAgICogQHBhcmFtIGZvckVhY2ggT3B0aW9uYWwgY2FsbGJhY2sgdG8gcnVuIGZvciBlYWNoIFN0YXRlIHJlZ2lzdGVyZWQuXG4gICAqL1xuICBwdWJsaWMgdXNlPFQgZXh0ZW5kcyBTdGF0ZT4oXG4gICAgaW5wdXRzOiBDb250ZXh0LkFjY2VwdDxUPixcbiAgICBmb3JFYWNoPzogQ29udGV4dC5FeHBlY3Q8VD5cbiAgKSB7XG4gICAgY29uc3QgaW5pdCA9IG5ldyBNYXA8U3RhdGUsIGJvb2xlYW4+KCk7XG5cbiAgICBpZiAodHlwZW9mIGlucHV0cyA9PSAnZnVuY3Rpb24nIHx8IGlucHV0cyBpbnN0YW5jZW9mIFN0YXRlKVxuICAgICAgaW5wdXRzID0geyBbMF06IGlucHV0cyB9O1xuXG4gICAgZm9yIChjb25zdCBbSywgVl0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRzKSkge1xuICAgICAgaWYgKCEoU3RhdGUuaXMoVikgfHwgViBpbnN0YW5jZW9mIFN0YXRlKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb250ZXh0IG1heSBvbmx5IGluY2x1ZGUgaW5zdGFuY2Ugb3IgY2xhc3MgXFxgZXh0ZW5kcyBTdGF0ZVxcYCBidXQgZ290ICR7XG4gICAgICAgICAgICBLID09ICcwJyB8fCBLID09IFN0cmluZyhWKSA/IFYgOiBgJHtWfSAoYXMgJyR7S30nKWBcbiAgICAgICAgICB9LmBcbiAgICAgICAgKTtcblxuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5pbnB1dHNbS107XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGluaXQuc2V0KHRoaXMuYWRkKFYpLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIENvbnRleHQgbXVzdCBmb3JjZS1yZXNldCBiZWNhdXNlIGlucHV0cyBhcmUgbm8gbG9uZ2VyIHNhZmUsXG4gICAgICAvLyBob3dldmVyIHByb2JhYmx5IHNob3VsZCBkbyB0aGF0IG9uIGEgcGVyLXN0YXRlIGJhc2lzLlxuICAgICAgZWxzZSBpZiAoZXhpc3RzICE9PSBWKSB7XG4gICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIHRoaXMudXNlKGlucHV0cyk7XG4gICAgICAgIHRoaXMuaWQgPSB1aWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3N0YXRlLCBleHBsaWNpdF0gb2YgaW5pdCkge1xuICAgICAgc3RhdGUuc2V0KCk7XG5cbiAgICAgIGlmIChleHBsaWNpdCAmJiBmb3JFYWNoKSBmb3JFYWNoKHN0YXRlIGFzIFQpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtfa2V5LCB2YWx1ZV0gb2Ygc3RhdGUpXG4gICAgICAgIGlmIChQQVJFTlQuZ2V0KHZhbHVlIGFzIFN0YXRlKSA9PT0gc3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmFkZCh2YWx1ZSBhcyBTdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgaW5pdC5zZXQodmFsdWUgYXMgU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNoaWxkIGNvbnRleHQsIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgb25lIG9yIG1vcmUgU3RhdGVzIHRvIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXRzIFN0YXRlLCBTdGF0ZSBjbGFzcywgb3IgbWFwIG9mIFN0YXRlcyAvIFN0YXRlIGNsYXNzZXMgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICBwdWJsaWMgcHVzaChpbnB1dHM/OiBDb250ZXh0LkFjY2VwdCkge1xuICAgIGNvbnN0IG5leHQgPSBPYmplY3QuY3JlYXRlKHRoaXMpIGFzIHRoaXM7XG5cbiAgICB0aGlzLmNsZWFudXAgPSBuZXcgU2V0KFsoKSA9PiBuZXh0LnBvcCgpLCAuLi50aGlzLmNsZWFudXBdKTtcblxuICAgIG5leHQuaW5wdXRzID0ge307XG4gICAgbmV4dC5jbGVhbnVwID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKGlucHV0cykgbmV4dC51c2UoaW5wdXRzKTtcblxuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgU3RhdGVzIGZyb20gdGhpcyBjb250ZXh0LlxuICAgKlxuICAgKiBXaWxsIGFsc28gcnVuIGFueSBjbGVhbnVwIGNhbGxiYWNrcyByZWdpc3RlcmVkIHdoZW4gU3RhdGVzIHdlcmUgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgcG9wKCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpIGRlbGV0ZSB0aGlzW2tleV07XG5cbiAgICB0aGlzLmNsZWFudXAuZm9yRWFjaCgoY2IpID0+IGNiKCkpO1xuICAgIHRoaXMuY2xlYW51cC5jbGVhcigpO1xuICAgIHRoaXMuaW5wdXRzID0ge307XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnRleHQucHJvdG90eXBlLCAndG9TdHJpbmcnLCB7XG4gIHZhbHVlKCkge1xuICAgIHJldHVybiBgQ29udGV4dC0ke3RoaXMuaWR9YDtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IENvbnRleHQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUdB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
@@ -0,0 +1,8 @@
1
+ import { Observable, addListener, event, watch } from "./observable.js";
2
+ import { METHOD, State } from "./state.js";
3
+ import { Context } from "./context.js";
4
+ import { Instruction, use } from "./instruction/use.js";
5
+ import { get } from "./instruction/get.js";
6
+ import { set } from "./instruction/set.js";
7
+ import { ref } from "./instruction/ref.js";
8
+ export { Context, type Instruction, METHOD, Observable, State, addListener, State as default, event, get, ref, set, use, watch };
package/dist/esm/index.js CHANGED
@@ -1,23 +1,9 @@
1
- import { use, Instruction } from "./instruction/use";
2
- import { get } from "./instruction/get";
3
- import { set } from "./instruction/set";
4
- import { ref } from "./instruction/ref";
5
- import { State, State as State2, METHOD } from "./state";
6
- import { watch, addListener, event, Observable } from "./control";
7
- import { Context } from "./context";
8
- export {
9
- Context,
10
- Instruction,
11
- METHOD,
12
- Observable,
13
- State,
14
- addListener,
15
- State2 as default,
16
- event,
17
- get,
18
- ref,
19
- set,
20
- use,
21
- watch
22
- };
23
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgeyB1c2UsIEluc3RydWN0aW9uIH0gZnJvbSAnLi9pbnN0cnVjdGlvbi91c2UnO1xuZXhwb3J0IHsgZ2V0IH0gZnJvbSAnLi9pbnN0cnVjdGlvbi9nZXQnO1xuZXhwb3J0IHsgc2V0IH0gZnJvbSAnLi9pbnN0cnVjdGlvbi9zZXQnO1xuZXhwb3J0IHsgcmVmIH0gZnJvbSAnLi9pbnN0cnVjdGlvbi9yZWYnO1xuXG5leHBvcnQgeyBTdGF0ZSwgU3RhdGUgYXMgZGVmYXVsdCwgTUVUSE9EIH0gZnJvbSAnLi9zdGF0ZSc7XG5leHBvcnQgeyB3YXRjaCwgYWRkTGlzdGVuZXIsIGV2ZW50LCBPYnNlcnZhYmxlIH0gZnJvbSAnLi9jb250cm9sJztcbmV4cG9ydCB7IENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLLG1CQUFtQjtBQUNqQyxTQUFTLFdBQVc7QUFDcEIsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsV0FBVztBQUVwQixTQUFTLE9BQWdCLFNBQVRBLFFBQWtCLGNBQWM7QUFDaEQsU0FBUyxPQUFPLGFBQWEsT0FBTyxrQkFBa0I7QUFDdEQsU0FBUyxlQUFlOyIsCiAgIm5hbWVzIjogWyJTdGF0ZSJdCn0K
1
+ import { Observable, addListener, event, watch } from "./observable.js";
2
+ import { METHOD, State } from "./state.js";
3
+ import { Context } from "./context.js";
4
+ import { use } from "./instruction/use.js";
5
+ import { get } from "./instruction/get.js";
6
+ import { set } from "./instruction/set.js";
7
+ import { ref } from "./instruction/ref.js";
8
+
9
+ export { Context, METHOD, Observable, State, addListener, State as default, event, get, ref, set, use, watch };
@@ -0,0 +1,36 @@
1
+ import { State } from "../state.js";
2
+
3
+ //#region src/instruction/get.d.ts
4
+ declare namespace get {
5
+ type Callback<T = any> = (state: T, subject: State) => void | boolean | (() => void);
6
+ }
7
+ /**
8
+ * Fetches upstream State from context with optional lifecycle callback.
9
+ * Callback runs on mount and can return cleanup function for unmount.
10
+ *
11
+ * @param Type - Type of State to fetch.
12
+ * @param callback - Optional lifecycle callback, receives (state, subject). Can return cleanup function.
13
+ */
14
+ declare function get<T extends State>(Type: State.Extends<T>, callback?: get.Callback<T>): T;
15
+ /**
16
+ * Fetches and assigns the controller which spawned this host.
17
+ * When parent assigns an instance via `use()` directive, it
18
+ * will be made available to child upon this request.
19
+ *
20
+ * @param Type - Type of controller compatible with this class.
21
+ * @param required - If false, property may be undefined. Otherwise will throw suspense.
22
+ */
23
+ declare function get<T extends State>(Type: State.Extends<T>, required: false): T | undefined;
24
+ /**
25
+ * Collects downstream States, this will accumulate all instances of specified type for which this is an ancestor.
26
+ * Returns a frozen array that updates as States are added or removed.
27
+ * Callback runs on each State registration and can return cleanup or false to prevent registration.
28
+ *
29
+ * @param Type - Type of State to collect.
30
+ * @param downstream - Must be true to enable downstream mode.
31
+ * @param callback - Optional lifecycle callback, receives (state, subject). May return false to prevent registration.
32
+ */
33
+ declare function get<T extends State>(Type: State.Extends<T>, downstream: true, callback?: get.Callback<T>): readonly T[];
34
+ //#endregion
35
+ export { get };
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuZGVjbGFyZSBuYW1lc3BhY2UgZ2V0IHtcbiAgICB0eXBlIENhbGxiYWNrPFQgPSBhbnk+ID0gKHN0YXRlOiBULCBzdWJqZWN0OiBTdGF0ZSkgPT4gdm9pZCB8IGJvb2xlYW4gfCAoKCkgPT4gdm9pZCk7XG59XG4vKipcbiAqIEZldGNoZXMgdXBzdHJlYW0gU3RhdGUgZnJvbSBjb250ZXh0IHdpdGggb3B0aW9uYWwgbGlmZWN5Y2xlIGNhbGxiYWNrLlxuICogQ2FsbGJhY2sgcnVucyBvbiBtb3VudCBhbmQgY2FuIHJldHVybiBjbGVhbnVwIGZ1bmN0aW9uIGZvciB1bm1vdW50LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBTdGF0ZSB0byBmZXRjaC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGxpZmVjeWNsZSBjYWxsYmFjaywgcmVjZWl2ZXMgKHN0YXRlLCBzdWJqZWN0KS4gQ2FuIHJldHVybiBjbGVhbnVwIGZ1bmN0aW9uLlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIGdldDxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLkV4dGVuZHM8VD4sIGNhbGxiYWNrPzogZ2V0LkNhbGxiYWNrPFQ+KTogVDtcbi8qKlxuICogRmV0Y2hlcyBhbmQgYXNzaWducyB0aGUgY29udHJvbGxlciB3aGljaCBzcGF3bmVkIHRoaXMgaG9zdC5cbiAqIFdoZW4gcGFyZW50IGFzc2lnbnMgYW4gaW5zdGFuY2UgdmlhIGB1c2UoKWAgZGlyZWN0aXZlLCBpdFxuICogd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB0byBjaGlsZCB1cG9uIHRoaXMgcmVxdWVzdC5cbiAqXG4gKiBAcGFyYW0gVHlwZSAtIFR5cGUgb2YgY29udHJvbGxlciBjb21wYXRpYmxlIHdpdGggdGhpcyBjbGFzcy5cbiAqIEBwYXJhbSByZXF1aXJlZCAtIElmIGZhbHNlLCBwcm9wZXJ0eSBtYXkgYmUgdW5kZWZpbmVkLiBPdGhlcndpc2Ugd2lsbCB0aHJvdyBzdXNwZW5zZS5cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBnZXQ8VCBleHRlbmRzIFN0YXRlPihUeXBlOiBTdGF0ZS5FeHRlbmRzPFQ+LCByZXF1aXJlZDogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBDb2xsZWN0cyBkb3duc3RyZWFtIFN0YXRlcywgdGhpcyB3aWxsIGFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBvZiBzcGVjaWZpZWQgdHlwZSBmb3Igd2hpY2ggdGhpcyBpcyBhbiBhbmNlc3Rvci5cbiAqIFJldHVybnMgYSBmcm96ZW4gYXJyYXkgdGhhdCB1cGRhdGVzIGFzIFN0YXRlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cbiAqIENhbGxiYWNrIHJ1bnMgb24gZWFjaCBTdGF0ZSByZWdpc3RyYXRpb24gYW5kIGNhbiByZXR1cm4gY2xlYW51cCBvciBmYWxzZSB0byBwcmV2ZW50IHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gVHlwZSAtIFR5cGUgb2YgU3RhdGUgdG8gY29sbGVjdC5cbiAqIEBwYXJhbSBkb3duc3RyZWFtIC0gTXVzdCBiZSB0cnVlIHRvIGVuYWJsZSBkb3duc3RyZWFtIG1vZGUuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBsaWZlY3ljbGUgY2FsbGJhY2ssIHJlY2VpdmVzIChzdGF0ZSwgc3ViamVjdCkuIE1heSByZXR1cm4gZmFsc2UgdG8gcHJldmVudCByZWdpc3RyYXRpb24uXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gZ2V0PFQgZXh0ZW5kcyBTdGF0ZT4oVHlwZTogU3RhdGUuRXh0ZW5kczxUPiwgZG93bnN0cmVhbTogdHJ1ZSwgY2FsbGJhY2s/OiBnZXQuQ2FsbGJhY2s8VD4pOiByZWFkb25seSBUW107XG5leHBvcnQgeyBnZXQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBQSxNQUFRO0NBQUE7RUFBQSxNQUFVLENBQUcsR0FBQyxNQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RCLElBQUksTUFBSztDQUFBO0VBQUEsTUFBVztFQUFDO0VBQU87RUFBRSxNQUFPO0VBQUc7RUFBUyxJQUFBO0VBQWM7RUFBRTtDQUFDO0VBQUE7RUFBQTtFQUFVO0VBQUk7RUFBRztFQUFLO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDeEYsSUFBQSxNQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUUsTUFBQTtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQSxJQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQSJ9