@owlmeans/state 0.1.18-rc.8 → 0.1.18

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.
Files changed (55) hide show
  1. package/README.md +173 -68
  2. package/agent-meta/manifest.json +3 -3
  3. package/agent-meta/skills/state/SKILL.md +137 -58
  4. package/build/consts.local.d.ts +10 -0
  5. package/build/consts.local.d.ts.map +1 -0
  6. package/build/consts.local.js +10 -0
  7. package/build/consts.local.js.map +1 -0
  8. package/build/errors.d.ts +12 -5
  9. package/build/errors.d.ts.map +1 -1
  10. package/build/errors.js +16 -13
  11. package/build/errors.js.map +1 -1
  12. package/build/helper.d.ts +16 -0
  13. package/build/helper.d.ts.map +1 -0
  14. package/build/helper.js +14 -0
  15. package/build/helper.js.map +1 -0
  16. package/build/index.d.ts +3 -2
  17. package/build/index.d.ts.map +1 -1
  18. package/build/index.js +2 -2
  19. package/build/index.js.map +1 -1
  20. package/build/resource.d.ts +12 -5
  21. package/build/resource.d.ts.map +1 -1
  22. package/build/resource.js +317 -207
  23. package/build/resource.js.map +1 -1
  24. package/build/types.d.ts +91 -50
  25. package/build/types.d.ts.map +1 -1
  26. package/build/types.local.d.ts +15 -0
  27. package/build/types.local.d.ts.map +1 -0
  28. package/build/types.local.js +2 -0
  29. package/build/types.local.js.map +1 -0
  30. package/build/utils/criteria.d.ts.map +1 -1
  31. package/build/utils/criteria.js.map +1 -1
  32. package/build/utils/model.d.ts +10 -2
  33. package/build/utils/model.d.ts.map +1 -1
  34. package/build/utils/model.js +26 -22
  35. package/build/utils/model.js.map +1 -1
  36. package/build/utils/types.d.ts +15 -0
  37. package/build/utils/types.d.ts.map +1 -0
  38. package/build/utils/types.js +2 -0
  39. package/build/utils/types.js.map +1 -0
  40. package/package.json +4 -4
  41. package/src/consts.local.ts +11 -0
  42. package/src/errors.ts +16 -13
  43. package/src/helper.ts +17 -0
  44. package/src/index.ts +3 -2
  45. package/src/resource.ts +359 -241
  46. package/src/types.local.ts +16 -0
  47. package/src/types.ts +98 -55
  48. package/src/utils/model.ts +35 -28
  49. package/src/utils/types.ts +15 -0
  50. package/tests/resource.spec.ts +347 -90
  51. package/build/.gitkeep +0 -0
  52. package/src/consts.ts +0 -3
  53. package/src/utils/criteria.ts +0 -252
  54. package/src/utils/index.ts +0 -3
  55. package/tests/criteria.spec.ts +0 -121
package/build/resource.js CHANGED
@@ -1,263 +1,373 @@
1
1
  import { appendContextual } from '@owlmeans/context';
2
- import { MisshapedRecord, RecordExists, UnknownRecordError, UnsupportedArgumentError } from '@owlmeans/resource';
3
- import { prepareListOptions } from '@owlmeans/resource';
4
- import { DEFAULT_ALIAS, DEFAULT_ID } from './consts';
5
- import { StateListenerError } from './errors.js';
2
+ import { RecordExists, recordQueryHelper, UnknownRecordError, UnsupportedArgumentError } from '@owlmeans/resource';
3
+ import { StateConfigError } from './errors.js';
6
4
  import { createStateModel } from './utils/model.js';
7
- import { filterRecords, sortRecords } from './utils/criteria.js';
8
- export const createStateResource = (alias = DEFAULT_ALIAS) => {
9
- const location = `state-resource:${alias}`;
10
- const store = {};
11
- const recordToListener = new Map();
12
- const listenerToRecord = new Map();
13
- const globalListeners = [];
14
- const systemToListeners = {};
15
- const listenerToQuery = new Map();
16
- const systemToQueries = {};
17
- const _notifyGlobalListeners = (records) => {
18
- globalListeners.forEach(listener => listener(records.map(record => createStateModel(record, resource))));
5
+ import { CHANGES, SOLE, STATE } from './consts.local.js';
6
+ /** Milliseconds until a subscription expires: a number is seconds from now, a Date the instant. */
7
+ const expiresIn = (ttl) => ttl instanceof Date ? ttl.getTime() - Date.now() : ttl * 1000;
8
+ export const createStateResource = (alias = STATE, cfg) => {
9
+ const config = { ...cfg };
10
+ const idField = (config.id ?? 'id');
11
+ const single = config.single === true;
12
+ const store = new Map();
13
+ /** One registry per kind of subscriber: a key, a query, and the change stream. */
14
+ const watchers = new Map();
15
+ const queries = new Set();
16
+ const subscribers = new Set();
17
+ /**
18
+ * The model handed out for a key, kept until the record behind it is replaced. React compares
19
+ * snapshots by reference, so rebuilding a model on every unrelated write would re-render every
20
+ * screen bound to the store.
21
+ */
22
+ const models = new Map();
23
+ const records = () => [...store.values()];
24
+ /**
25
+ * The key a record is filed under.
26
+ *
27
+ * @throws {StateConfigError} `NoId` — nothing here mints ids, so a record without one is
28
+ * misfiled rather than new.
29
+ */
30
+ const keyOf = (record) => {
31
+ if (single) {
32
+ return SOLE;
33
+ }
34
+ const id = record[idField];
35
+ if (typeof id !== 'string' || id === '') {
36
+ throw new StateConfigError(StateConfigError.NoId);
37
+ }
38
+ return id;
19
39
  };
20
- const _usubscribe = (params) => () => {
21
- listenerToQuery.delete(params.listener);
22
- Object.entries(systemToQueries).some(([key, subscription]) => {
23
- if (subscription.listener === params.listener) {
24
- delete systemToQueries[key];
25
- return true;
40
+ /**
41
+ * The key an id addresses.
42
+ *
43
+ * @throws {StateConfigError} `NonSingle` — an absent id on a resource that holds many records.
44
+ */
45
+ const keyFor = (id) => {
46
+ if (id == null) {
47
+ if (!single) {
48
+ throw new StateConfigError(StateConfigError.NonSingle);
26
49
  }
27
- return false;
28
- });
29
- const ids = listenerToRecord.get(params.listener);
30
- listenerToRecord.delete(params.listener);
31
- ids?.forEach(id => {
32
- const listeners = recordToListener.get(id);
33
- if (listeners != null) {
34
- listeners.delete(params.listener);
35
- if (listeners.size === 0) {
36
- recordToListener.delete(id);
50
+ return SOLE;
51
+ }
52
+ return single ? SOLE : id;
53
+ };
54
+ /** The key a record already in the store is filed under — its id is known to be there. */
55
+ const storedKey = (record) => single ? SOLE : record[idField];
56
+ /**
57
+ * A read by id. On a single resource the one record answers only to its own id, so asking for
58
+ * a different one is a miss rather than the sole record under a wrong name.
59
+ */
60
+ const read = (id) => {
61
+ const record = store.get(keyFor(id));
62
+ if (record == null) {
63
+ return null;
64
+ }
65
+ const own = record[idField];
66
+ if (single && own != null && own !== id) {
67
+ return null;
68
+ }
69
+ return record;
70
+ };
71
+ const first = (idOrWhere, opts) => typeof idOrWhere === 'string' ? read(idOrWhere) : recordQueryHelper.firstMatch(records(), idOrWhere, opts);
72
+ /** The store keeps no expiring records, so a ttl would be silently dropped. */
73
+ const refuseTtl = (opts) => {
74
+ if (opts?.ttl != null) {
75
+ throw new UnsupportedArgumentError('ttl');
76
+ }
77
+ };
78
+ const modelFor = (key) => {
79
+ const record = store.get(key);
80
+ const cached = models.get(key);
81
+ if (cached != null && cached.from === record) {
82
+ return cached.model;
83
+ }
84
+ const id = record?.[idField] ?? (key === SOLE ? undefined : key);
85
+ const model = createStateModel({
86
+ id,
87
+ record,
88
+ default: config.default,
89
+ write: async (value) => {
90
+ const next = { ...value };
91
+ if (!single) {
92
+ next[idField] = key;
37
93
  }
94
+ return write(key, next);
95
+ },
96
+ drop: async () => {
97
+ const removed = store.get(key);
98
+ if (removed == null) {
99
+ return;
100
+ }
101
+ store.delete(key);
102
+ notify('remove', [[key, removed]]);
38
103
  }
39
104
  });
40
- Object.entries(systemToListeners).some(([key, listener]) => {
41
- if (listener === params.listener) {
42
- delete systemToListeners[key];
43
- return true;
44
- }
45
- return false;
46
- });
105
+ models.set(key, { from: record, model });
106
+ return model;
47
107
  };
48
- const _queryModels = (query) => filterRecords(Object.values(store), query).map(record => createStateModel(record, resource));
49
108
  /**
50
- * Re-run every live query and hand each subscriber its current answer.
109
+ * The model for "nothing is addressed yet" — one instance, reused.
51
110
  *
52
- * Deliberately unconditional: deciding whether a write could have changed a given query's
53
- * result is the same work as re-running it, and getting that wrong leaves a list stale with
54
- * nothing to indicate it.
111
+ * It must be the SAME reference every time: a React subscriber compares snapshots by identity,
112
+ * and a freshly built model would read as a change on every render and loop. Writing through it
113
+ * is refused rather than silently dropped, because a caller that writes without an id has lost
114
+ * track of which record it meant.
55
115
  */
56
- const _notifyQueryListeners = () => {
57
- for (const subscription of [...listenerToQuery.values(), ...Object.values(systemToQueries)]) {
58
- subscription.listener(_queryModels(subscription.query), subscription.systemId);
116
+ let blank;
117
+ const emptyModel = () => blank ??= createStateModel({
118
+ id: undefined,
119
+ record: undefined,
120
+ default: config.default,
121
+ write: async () => { throw new StateConfigError(StateConfigError.NoId); },
122
+ drop: async () => { throw new StateConfigError(StateConfigError.NoId); }
123
+ });
124
+ const queryModels = (watch) => recordQueryHelper.sortRecords(recordQueryHelper.filterRecords(records(), watch.where), watch.opts?.sort)
125
+ .map(record => modelFor(storedKey(record)));
126
+ const same = (left, right) => left.length === right.length && left.every((model, index) => model === right[index]);
127
+ /** Deliver on one channel. Returns what the handlers gave back, for a caller that awaits. */
128
+ const deliver = (event, channel) => {
129
+ const delivered = [];
130
+ for (const subscription of [...subscribers]) {
131
+ if (subscription.channel !== channel) {
132
+ continue;
133
+ }
134
+ if (subscription.once) {
135
+ subscribers.delete(subscription);
136
+ if (subscription.timer != null) {
137
+ clearTimeout(subscription.timer);
138
+ }
139
+ }
140
+ delivered.push(subscription.handler(event));
59
141
  }
142
+ return delivered;
60
143
  };
61
- const _notifyListeners = (record) => {
62
- for (const listener of recordToListener.get(record.id) ?? []) {
63
- listener([createStateModel(record, resource)]);
144
+ /**
145
+ * Tell everyone what changed. Key watchers hear only about their own record; every live query
146
+ * is re-evaluated, because a write can move a record into a set it was not in and deciding
147
+ * whether it did is the same work as re-running the query.
148
+ */
149
+ const notify = (type, changed) => {
150
+ if (changed.length < 1) {
151
+ return;
152
+ }
153
+ for (const [key] of changed) {
154
+ const listeners = watchers.get(key);
155
+ if (listeners == null) {
156
+ continue;
157
+ }
158
+ const model = modelFor(key);
159
+ for (const listener of [...listeners]) {
160
+ listener(model);
161
+ }
64
162
  }
65
- for (const key of Object.keys(systemToListeners)) {
66
- const [, ...idsProto] = key.split(':');
67
- const ids = idsProto.join(':').split(',');
68
- if (ids.includes(record.id)) {
69
- systemToListeners[key](ids.map(id => createStateModel(store[id], resource)), key);
163
+ for (const watch of [...queries]) {
164
+ const current = queryModels(watch);
165
+ if (same(watch.last, current)) {
166
+ continue;
70
167
  }
168
+ watch.last = current;
169
+ watch.listener(current);
71
170
  }
171
+ deliver({ type, records: changed.map(([, record]) => record) }, CHANGES);
172
+ /**
173
+ * A key nobody watches and nothing is stored under has no model worth keeping — otherwise the
174
+ * cache grows with every record the store ever held. A watched key keeps its entry, so an
175
+ * empty model stays the same object and a screen bound to a deleted record does not re-render
176
+ * on every unrelated write.
177
+ */
178
+ for (const [key] of changed) {
179
+ if (!store.has(key) && !watchers.has(key)) {
180
+ models.delete(key);
181
+ }
182
+ }
183
+ };
184
+ const write = (key, record) => {
185
+ const value = { ...record };
186
+ store.set(key, value);
187
+ notify('set', [[key, value]]);
188
+ return value;
72
189
  };
73
190
  const resource = appendContextual(alias, {
74
- get: async (id, field, opts) => {
75
- const record = await resource.load(id, field, opts);
191
+ config,
192
+ get: async (idOrWhere, opts) => {
193
+ const record = first(idOrWhere, opts);
76
194
  if (record == null) {
77
- throw new UnknownRecordError(id);
195
+ throw new UnknownRecordError(typeof idOrWhere === 'string' ? idOrWhere : 'criteria');
78
196
  }
79
197
  return record;
80
198
  },
81
- load: async (id, field, opts) => {
82
- if (field != null) {
83
- throw new UnsupportedArgumentError(`${location}:get:filed`);
84
- }
85
- if (opts != null) {
86
- throw new UnsupportedArgumentError(`${location}:get:opts`);
199
+ load: async (idOrWhere, opts) => first(idOrWhere, opts),
200
+ /** Unpaged unless a size is asked for: a screen reading the store expects all of it. */
201
+ list: async (where, opts) => {
202
+ if (opts?.page != null && opts.size == null) {
203
+ throw new UnsupportedArgumentError('page-without-size');
87
204
  }
88
- const record = store[id];
89
- if (record == null) {
90
- return null;
91
- }
92
- return record;
93
- },
94
- /**
95
- * The `Resource` list contract, criteria and pager included.
96
- *
97
- * The default page size is 0 — meaning UNPAGED — rather than the ten a server resource
98
- * defaults to. Every existing caller of a state resource writes `list()` and expects the
99
- * whole store back; silently returning the first ten would be a truncation nothing reports.
100
- * Pagination happens when a pager is actually asked for.
101
- */
102
- list: async (criteria, opts) => {
103
- const options = prepareListOptions(0, criteria, opts);
104
- const matched = sortRecords(filterRecords(Object.values(store), options.criteria), options.pager?.sort);
105
- const size = options.pager?.size ?? 0;
106
- const page = options.pager?.page ?? 0;
107
- const items = size > 0 ? matched.slice(page * size, page * size + size) : matched;
108
- const result = {
109
- items,
110
- pager: { ...options.pager, total: matched.length }
111
- };
112
- return result;
113
- },
114
- all: async () => Object.values(store),
115
- match: async (criteria) => filterRecords(Object.values(store), criteria),
116
- save: async (record, opts) => {
117
- const id = record.id ?? DEFAULT_ID;
118
- if (store[id] != null) {
119
- return resource.update(record, opts);
120
- }
121
- return resource.create(record, opts);
205
+ return recordQueryHelper.applyQuery(records(), where, opts);
122
206
  },
207
+ count: async (where) => recordQueryHelper.filterRecords(records(), where).length,
123
208
  create: async (record, opts) => {
124
- if (!("id" in record) || record.id == null) {
125
- record.id = DEFAULT_ID;
126
- }
127
- if (store[record.id] != null) {
128
- throw new RecordExists(record.id);
209
+ refuseTtl(opts);
210
+ const key = keyOf(record);
211
+ if (store.has(key)) {
212
+ throw new RecordExists(key === SOLE ? alias : key);
129
213
  }
130
- if (opts != null) {
131
- throw new UnsupportedArgumentError(`${location}:create:opts`);
132
- }
133
- store[record.id] = record;
134
- _notifyListeners(store[record.id]);
135
- _notifyGlobalListeners([store[record.id]]);
136
- _notifyQueryListeners();
137
- return record;
214
+ return write(key, record);
138
215
  },
216
+ /** Replaces the stored record rather than merging into it, as the contract says. */
139
217
  update: async (record, opts) => {
140
- if (opts != null) {
141
- throw new UnsupportedArgumentError(`${location}:update:opts`);
142
- }
143
- if (!("id" in record) || record.id == null) {
144
- record.id = DEFAULT_ID;
218
+ refuseTtl(opts);
219
+ const key = keyOf(record);
220
+ if (!store.has(key)) {
221
+ throw new UnknownRecordError(key === SOLE ? alias : key);
145
222
  }
146
- const reference = store[record.id];
147
- if (reference == null) {
148
- throw new UnknownRecordError(record.id);
149
- }
150
- Object.assign(reference, record);
151
- _notifyListeners(reference);
152
- _notifyGlobalListeners([reference]);
153
- _notifyQueryListeners();
154
- return reference;
223
+ return write(key, record);
155
224
  },
156
- delete: async (id, opts) => {
157
- const _id = typeof id === 'string' ? id : id.id;
158
- if (_id == null) {
159
- throw new UnsupportedArgumentError('id');
160
- }
161
- const record = store[_id];
225
+ save: async (record, opts) => {
226
+ refuseTtl(opts);
227
+ return write(keyOf(record), record);
228
+ },
229
+ delete: async (id) => {
230
+ const record = read(id);
162
231
  if (record == null) {
163
232
  return null;
164
233
  }
165
- if (opts != null) {
166
- throw new UnsupportedArgumentError(`${location}:delete:opts`);
167
- }
168
- delete store[_id];
169
- _notifyListeners(record);
170
- _notifyGlobalListeners([record]);
171
- _notifyQueryListeners();
234
+ const key = keyFor(id);
235
+ store.delete(key);
236
+ notify('remove', [[key, record]]);
172
237
  return record;
173
238
  },
174
- pick: async (id, opts) => {
175
- const _id = typeof id === 'string' ? id : id.id;
176
- if (_id == null) {
177
- throw new MisshapedRecord('id');
178
- }
179
- const record = await resource.delete(_id, opts);
239
+ take: async (id) => {
240
+ const record = await resource.delete(id);
180
241
  if (record == null) {
181
- throw new UnknownRecordError(_id);
242
+ throw new UnknownRecordError(id);
182
243
  }
183
244
  return record;
184
245
  },
185
- subscribe: params => {
186
- /**
187
- * A query subscription is a different thing from an id subscription and cannot be layered
188
- * on top of one: it creates no placeholder record, and its answer is a set that changes
189
- * membership rather than a fixed list of records that change content. `id` wins when both
190
- * are given, so an existing caller that happens to pass a query keeps its behaviour.
191
- */
192
- if (params.query != null && params.id == null) {
193
- const subscription = { query: params.query, listener: params.listener };
194
- const models = _queryModels(params.query);
195
- if (params._systemId != null) {
196
- const key = `${params._systemId}:query:${JSON.stringify(params.query)}`;
197
- if (systemToQueries[key] != null) {
198
- return [_usubscribe(params), models];
199
- }
200
- subscription.systemId = key;
201
- systemToQueries[key] = subscription;
202
- }
203
- else {
204
- if (listenerToQuery.has(params.listener)) {
205
- throw new StateListenerError('subscribed');
206
- }
207
- listenerToQuery.set(params.listener, subscription);
208
- }
209
- return [_usubscribe(params), models];
246
+ purge: async (where) => {
247
+ if (where == null || Object.keys(where).length < 1) {
248
+ throw new UnsupportedArgumentError('purge:empty-criteria');
210
249
  }
211
- const id = params.id ?? DEFAULT_ID;
212
- const ids = Array.isArray(id) ? id : [id];
213
- const records = ids.map(id => {
214
- if (store[id] == null) {
215
- store[id] = { ...params.default, id };
216
- }
217
- return createStateModel(store[id], resource);
218
- });
219
- if (params._systemId != null) {
220
- const key = `${params._systemId}:${ids.join(",")}`;
221
- if (systemToListeners[key] != null) {
222
- return [_usubscribe(params), records];
223
- }
224
- systemToListeners[key] = params.listener;
250
+ const removed = recordQueryHelper.filterRecords(records(), where)
251
+ .map((record) => [storedKey(record), record]);
252
+ for (const [key] of removed) {
253
+ store.delete(key);
225
254
  }
226
- else {
227
- if (listenerToRecord.has(params.listener)) {
228
- throw new StateListenerError('subscribed');
229
- }
230
- listenerToRecord.set(params.listener, ids);
231
- ids.forEach(id => {
232
- if (!recordToListener.has(id)) {
233
- recordToListener.set(id, new Set());
234
- }
235
- recordToListener.get(id)?.add(params.listener);
236
- });
255
+ notify('remove', removed);
256
+ return removed.length;
257
+ },
258
+ /**
259
+ * The store is rewritten before anything is told about it, so a subscriber never sees the
260
+ * half-applied set. On a `single` resource every record lands in the one slot, which means a
261
+ * list of several collapses to the last of them.
262
+ */
263
+ replace: async (list) => {
264
+ const written = list.map((record) => [keyOf(record), { ...record }]);
265
+ const keys = new Set(written.map(([key]) => key));
266
+ const dropped = [...store.entries()].filter(([key]) => !keys.has(key));
267
+ for (const [key] of dropped) {
268
+ store.delete(key);
237
269
  }
238
- return [_usubscribe(params), records];
270
+ for (const [key, record] of written) {
271
+ store.set(key, record);
272
+ }
273
+ notify('remove', dropped);
274
+ notify('set', written);
275
+ },
276
+ clear: async () => {
277
+ const dropped = [...store.entries()];
278
+ store.clear();
279
+ notify('remove', dropped);
239
280
  },
240
- listen: listener => {
241
- globalListeners.push(listener);
281
+ watch: (id, listener) => {
282
+ /**
283
+ * Watching before there is anything to watch is a RENDERING state, not a mistake.
284
+ *
285
+ * A screen binds to `useStoreModel(project.record.id)` while the project is still loading,
286
+ * so the id is legitimately absent for the first renders. Treating that as the
287
+ * configuration error it would be on `load()` or `save()` crashes the component tree over
288
+ * data that is simply not here yet. So an absent id on a listed resource watches nothing
289
+ * and reports an empty model; the error stays where it means something — a direct read or
290
+ * write with no id, which cannot be anything but a mistake.
291
+ */
292
+ if (id == null && !single) {
293
+ listener(emptyModel());
294
+ return () => { };
295
+ }
296
+ const key = keyFor(id);
297
+ let listeners = watchers.get(key);
298
+ if (listeners == null) {
299
+ listeners = new Set();
300
+ watchers.set(key, listeners);
301
+ }
302
+ const bound = listeners;
303
+ bound.add(listener);
304
+ /**
305
+ * Seeded before `watch` returns, and seeded with nothing when the store holds nothing: an
306
+ * id subscription creates NO record, so a screen bound to an unknown id gets an empty
307
+ * model rather than putting a blank row into every list reading the same store.
308
+ */
309
+ listener(modelFor(key));
310
+ /**
311
+ * The cached model outlives the subscription on purpose. A React subscriber takes its first
312
+ * snapshot by watching and stopping again, and a rebuilt model would read as a changed value
313
+ * the moment it subscribes for real. Keys the store no longer holds are dropped on the next
314
+ * change to them instead.
315
+ */
242
316
  return () => {
243
- const index = globalListeners.indexOf(listener);
244
- if (index >= 0) {
245
- globalListeners.splice(index, 1);
317
+ bound.delete(listener);
318
+ if (bound.size < 1) {
319
+ watchers.delete(key);
246
320
  }
247
321
  };
248
322
  },
249
- erase: async () => {
250
- await Promise.all(Object.keys(store).map(key => resource.delete(key)));
323
+ query: (where, listener, opts) => {
324
+ const watch = { where, opts, listener, last: [] };
325
+ queries.add(watch);
326
+ watch.last = queryModels(watch);
327
+ listener(watch.last);
328
+ return () => { queries.delete(watch); };
329
+ },
330
+ /**
331
+ * Writes announce themselves on the default channel, so publishing is for what the store
332
+ * cannot know it did — a change that arrived from elsewhere, or a channel of a caller's own.
333
+ */
334
+ publish: async (value, channel) => {
335
+ await Promise.all(deliver(value, channel ?? CHANGES));
336
+ },
337
+ subscribe: async (handler, opts) => {
338
+ const subscription = {
339
+ handler, channel: opts?.channel ?? CHANGES, once: opts?.once === true
340
+ };
341
+ subscribers.add(subscription);
342
+ const stop = async () => {
343
+ subscribers.delete(subscription);
344
+ if (subscription.timer != null) {
345
+ clearTimeout(subscription.timer);
346
+ subscription.timer = undefined;
347
+ }
348
+ };
349
+ if (opts?.ttl != null) {
350
+ subscription.timer = setTimeout(() => void stop(), expiresIn(opts.ttl));
351
+ }
352
+ return stop;
251
353
  }
252
354
  });
253
355
  return resource;
254
356
  };
255
- export const appendStateResource = (ctx, alias = DEFAULT_ALIAS) => {
256
- const resource = createStateResource(alias);
357
+ /**
358
+ * Register a state resource on the context and expose `getStateResource`.
359
+ *
360
+ * Idempotent: appending the same alias twice keeps the resource that is already there, so a
361
+ * setup that runs more than once does not drop what the store has collected. The first alias
362
+ * appended is the one `getStateResource()` answers with when it is called without one.
363
+ */
364
+ export const appendStateResource = (ctx, alias = STATE, cfg) => {
257
365
  const _ctx = ctx;
258
- _ctx.registerResource(resource);
366
+ if (!_ctx.hasResource(alias)) {
367
+ _ctx.registerResource(createStateResource(alias, cfg));
368
+ }
259
369
  if (_ctx.getStateResource == null) {
260
- _ctx.getStateResource = alias => ctx.resource(alias ?? resource.alias);
370
+ _ctx.getStateResource = ((_alias) => ctx.resource(_alias ?? alias));
261
371
  }
262
372
  return _ctx;
263
373
  };
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4D,MAAM,mBAAmB,CAAA;AAC9G,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,wBAAwB,EAAiJ,MAAM,oBAAoB,CAAA;AACjQ,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAInD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGxD,mGAAmG;AACnG,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAU,EAAE,CACrC,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAA;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAK,GAAW,KAAK,EAAE,GAAoB,EACzB,EAAE;IACpB,MAAM,MAAM,GAAmB,EAAE,GAAG,GAAG,EAAE,CAAA;IACzC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAqB,CAAA;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI,CAAA;IAErC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAa,CAAA;IAElC,kFAAkF;IAClF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+C,CAAA;IACvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAA;IAE9C;;;;OAIG;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyD,CAAA;IAE/E,MAAM,OAAO,GAAG,GAAQ,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAE9C;;;;;OAKG;IACH,MAAM,KAAK,GAAG,CAAC,MAAkB,EAAU,EAAE;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAY,CAAA;QACrC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED;;;;OAIG;IACH,MAAM,MAAM,GAAG,CAAC,EAAsB,EAAU,EAAE;QAChD,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YACxD,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,0FAA0F;IAC1F,MAAM,SAAS,GAAG,CAAC,MAAS,EAAU,EAAE,CACtC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAsB,CAAA;IAEtD;;;OAGG;IACH,MAAM,IAAI,GAAG,CAAC,EAAU,EAAY,EAAE;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAY,CAAA;QACtC,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACxC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,SAA+B,EAAE,IAAsB,EAAY,EAAE,CAClF,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;IAE5G,+EAA+E;IAC/E,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAQ,EAAE;QAC9C,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAiB,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,KAAK,CAAA;QACrB,CAAC;QAED,MAAM,EAAE,GAAI,MAAM,EAAE,CAAC,OAAO,CAAmC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACnG,MAAM,KAAK,GAAG,gBAAgB,CAAI;YAChC,EAAE;YACF,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gBACnB,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,EAAO,CAAA;gBAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACX,IAAgC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAA;gBAClD,CAAC;gBAED,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACzB,CAAC;YACD,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC9B,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAM;gBACR,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACjB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;YACpC,CAAC;SACF,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAExC,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED;;;;;;;OAOG;IACH,IAAI,KAAgC,CAAA;IACpC,MAAM,UAAU,GAAG,GAAkB,EAAE,CAAC,KAAK,KAAK,gBAAgB,CAAI;QACpE,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;QACxE,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;KACxE,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAmB,EAAE,CAC5D,iBAAiB,CAAC,WAAW,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;SACrG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAE/C,MAAM,IAAI,GAAG,CAAC,IAAqB,EAAE,KAAsB,EAAW,EAAE,CACtE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAEtF,6FAA6F;IAC7F,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAE,OAAe,EAA+B,EAAE;QACrF,MAAM,SAAS,GAAgC,EAAE,CAAA;QACjD,KAAK,MAAM,YAAY,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;YAC5C,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBACrC,SAAQ;YACV,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACtB,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBAChC,IAAI,YAAY,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBAC/B,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IAED;;;;OAIG;IACH,MAAM,MAAM,GAAG,CAAC,IAA2B,EAAE,OAA2B,EAAQ,EAAE;QAChF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC3B,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9B,SAAQ;YACV,CAAC;YACD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAA;YACpB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QACxE;;;;;WAKG;QACH,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,MAAkB,EAAK,EAAE;QACnD,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,EAAO,CAAA;QAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QAE7B,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,MAAM,QAAQ,GAAqB,gBAAgB,CAAmB,KAAK,EAAE;QAC3E,MAAM;QAEN,GAAG,EAAE,KAAK,EAAE,SAA+B,EAAE,IAAsB,EAAc,EAAE;YACjF,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,kBAAkB,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;YACtF,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,SAA+B,EAAE,IAAsB,EAAqB,EAAE,CACzF,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;QAExB,wFAAwF;QACxF,IAAI,EAAE,KAAK,EAAE,KAAmB,EAAE,IAAqB,EAAE,EAAE;YACzD,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC5C,MAAM,IAAI,wBAAwB,CAAC,mBAAmB,CAAC,CAAA;YACzD,CAAC;YAED,OAAO,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAC7D,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,KAAmB,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,MAAM;QAE9F,MAAM,EAAE,KAAK,EAAE,MAAkB,EAAE,IAAmB,EAAE,EAAE;YACxD,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YACzB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,YAAY,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YACpD,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC3B,CAAC;QAED,oFAAoF;QACpF,MAAM,EAAE,KAAK,EAAE,MAAkB,EAAE,IAAmB,EAAE,EAAE;YACxD,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,kBAAkB,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC1D,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC3B,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,MAAkB,EAAE,IAAmB,EAAE,EAAE;YACtD,SAAS,CAAC,IAAI,CAAC,CAAA;YAEf,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;YACvB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;YACtB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;YAEjC,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACxC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAClC,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,KAAkB,EAAE,EAAE;YAClC,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,wBAAwB,CAAC,sBAAsB,CAAC,CAAA;YAC5D,CAAC;YACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;iBAC9D,GAAG,CAAC,CAAC,MAAM,EAAe,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;YAC5D,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAEzB,OAAO,OAAO,CAAC,MAAM,CAAA;QACvB,CAAC;QAED;;;;WAIG;QACH,OAAO,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAe,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;YACjF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACtE,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACpC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACxB,CAAC;YACD,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACzB,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACxB,CAAC;QAED,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACpC,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3B,CAAC;QAED,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;YACtB;;;;;;;;;eASG;YACH,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;gBAEtB,OAAO,GAAG,EAAE,GAAG,CAAC,CAAA;YAClB,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;YACtB,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACtB,SAAS,GAAG,IAAI,GAAG,EAAE,CAAA;gBACrB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YAC9B,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAA;YACvB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACnB;;;;eAIG;YACH,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;YAEvB;;;;;eAKG;YACH,OAAO,GAAG,EAAE;gBACV,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACtB,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBACnB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC,CAAA;QACH,CAAC;QAED,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClB,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;YAC/B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAEpB,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAA;QACxC,CAAC;QAED;;;WAGG;QACH,OAAO,EAAE,KAAK,EAAE,KAAoB,EAAE,OAAgB,EAAE,EAAE;YACxD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAA;QACvD,CAAC;QAED,SAAS,EAAE,KAAK,EACd,OAAuD,EAAE,IAAuB,EAChF,EAAE;YACF,MAAM,YAAY,GAAoB;gBACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI;aACtE,CAAA;YACD,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YAE7B,MAAM,IAAI,GAAgB,KAAK,IAAI,EAAE;gBACnC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBAChC,IAAI,YAAY,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBAC/B,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;oBAChC,YAAY,CAAC,KAAK,GAAG,SAAS,CAAA;gBAChC,CAAC;YACH,CAAC,CAAA;YAED,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;gBACtB,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACzE,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAEjC,GAAM,EAAE,KAAK,GAAW,KAAK,EAAE,GAAoB,EAA2B,EAAE;IAChF,MAAM,IAAI,GAAG,GAA8B,CAAA;IAE3C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAI,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAA2B,MAAe,EAAE,EAAE,CACrE,GAAG,CAAC,QAAQ,CAAmB,MAAM,IAAI,KAAK,CAAC,CAA4C,CAAA;IAC/F,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}