cross-state 0.37.12 → 0.37.13

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 (61) hide show
  1. package/dist/cjs/diff.cjs +6 -2
  2. package/dist/cjs/diff.cjs.map +1 -1
  3. package/dist/cjs/hash.cjs +5 -2
  4. package/dist/cjs/hash.cjs.map +1 -1
  5. package/dist/cjs/index.cjs +18 -13
  6. package/dist/cjs/index.cjs.map +1 -1
  7. package/dist/cjs/mutative/index.cjs +8 -3
  8. package/dist/cjs/mutative/index.cjs.map +1 -1
  9. package/dist/cjs/mutative/register.cjs +5 -3
  10. package/dist/cjs/mutative/register.cjs.map +1 -1
  11. package/dist/cjs/mutativeMethods.cjs +5 -2
  12. package/dist/cjs/mutativeMethods.cjs.map +1 -1
  13. package/dist/cjs/patches/index.cjs +7 -3
  14. package/dist/cjs/patches/index.cjs.map +1 -1
  15. package/dist/cjs/patches/register.cjs +5 -3
  16. package/dist/cjs/patches/register.cjs.map +1 -1
  17. package/dist/cjs/propAccess.cjs +6 -1
  18. package/dist/cjs/propAccess.cjs.map +1 -1
  19. package/dist/cjs/react/index.cjs +38 -36
  20. package/dist/cjs/react/index.cjs.map +1 -1
  21. package/dist/cjs/react/register.cjs +6 -4
  22. package/dist/cjs/react/register.cjs.map +1 -1
  23. package/dist/cjs/scope.cjs +32 -43
  24. package/dist/cjs/scope.cjs.map +1 -1
  25. package/dist/cjs/store.cjs +53 -46
  26. package/dist/cjs/store.cjs.map +1 -1
  27. package/dist/cjs/storeMethods.cjs +467 -341
  28. package/dist/cjs/storeMethods.cjs.map +1 -1
  29. package/dist/cjs/urlStore.cjs +9 -6
  30. package/dist/cjs/urlStore.cjs.map +1 -1
  31. package/dist/es/diff.mjs +5 -5
  32. package/dist/es/diff.mjs.map +1 -1
  33. package/dist/es/hash.mjs +4 -4
  34. package/dist/es/hash.mjs.map +1 -1
  35. package/dist/es/index.mjs +17 -42
  36. package/dist/es/index.mjs.map +1 -1
  37. package/dist/es/mutative/index.mjs +1 -4
  38. package/dist/es/mutative/index.mjs.map +1 -1
  39. package/dist/es/mutative/register.mjs +3 -2
  40. package/dist/es/mutative/register.mjs.map +1 -1
  41. package/dist/es/mutativeMethods.mjs +4 -4
  42. package/dist/es/mutativeMethods.mjs.map +1 -1
  43. package/dist/es/patches/index.mjs +4 -4
  44. package/dist/es/patches/index.mjs.map +1 -1
  45. package/dist/es/patches/register.mjs +3 -2
  46. package/dist/es/patches/register.mjs.map +1 -1
  47. package/dist/es/propAccess.mjs +5 -12
  48. package/dist/es/propAccess.mjs.map +1 -1
  49. package/dist/es/react/index.mjs +36 -52
  50. package/dist/es/react/index.mjs.map +1 -1
  51. package/dist/es/react/register.mjs +4 -3
  52. package/dist/es/react/register.mjs.map +1 -1
  53. package/dist/es/scope.mjs +31 -52
  54. package/dist/es/scope.mjs.map +1 -1
  55. package/dist/es/store.mjs +52 -62
  56. package/dist/es/store.mjs.map +1 -1
  57. package/dist/es/storeMethods.mjs +455 -341
  58. package/dist/es/storeMethods.mjs.map +1 -1
  59. package/dist/es/urlStore.mjs +5 -7
  60. package/dist/es/urlStore.mjs.map +1 -1
  61. package/package.json +1 -1
@@ -1,14 +1,15 @@
1
- "use strict";
2
- const propAccess = require("./propAccess.cjs");
1
+ 'use strict';
2
+
3
+ const propAccess = require('./propAccess.cjs');
4
+
3
5
  const marker = Symbol("autobind");
4
6
  const autobind = (_class) => {
5
- var _a;
6
7
  for (const key of Reflect.ownKeys(_class.prototype)) {
7
8
  if (key === "constructor") {
8
9
  continue;
9
10
  }
10
11
  const descriptor = Reflect.getOwnPropertyDescriptor(_class.prototype, key);
11
- let method = ((_a = descriptor == null ? void 0 : descriptor.get) == null ? void 0 : _a.call(descriptor)) ?? (descriptor == null ? void 0 : descriptor.value);
12
+ let method = descriptor?.get?.() ?? descriptor?.value;
12
13
  let isBinding = false;
13
14
  if (typeof method !== "function" || method[marker]) {
14
15
  continue;
@@ -38,11 +39,13 @@ const autobind = (_class) => {
38
39
  }
39
40
  return _class;
40
41
  };
42
+
41
43
  function calcDuration(t) {
42
44
  if (typeof t === "number")
43
45
  return t;
44
46
  return (t.milliseconds ?? 0) + (t.seconds ?? 0) * 1e3 + (t.minutes ?? 0) * 60 * 1e3 + (t.hours ?? 0) * 60 * 60 * 1e3 + (t.days ?? 0) * 24 * 60 * 60 * 1e3;
45
47
  }
48
+
46
49
  class Deferred extends Promise {
47
50
  constructor() {
48
51
  const that = {};
@@ -57,9 +60,11 @@ class Deferred extends Promise {
57
60
  return Promise;
58
61
  }
59
62
  }
63
+
60
64
  function isPromise(value) {
61
65
  return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
62
66
  }
67
+
63
68
  function queue() {
64
69
  const q = [];
65
70
  const completionListeners = /* @__PURE__ */ new Set();
@@ -117,6 +122,7 @@ function queue() {
117
122
  }
118
123
  );
119
124
  }
125
+
120
126
  class PromiseWithState extends Promise {
121
127
  constructor(value, state = { status: "pending" }) {
122
128
  super((resolve) => resolve(value));
@@ -141,6 +147,7 @@ class PromiseWithState extends Promise {
141
147
  return new PromiseWithState(Promise.reject(error), { status: "error", error });
142
148
  }
143
149
  }
150
+
144
151
  function calculatedValue(store, notify) {
145
152
  let active = false;
146
153
  const deps = new Array();
@@ -161,14 +168,13 @@ function calculatedValue(store, notify) {
161
168
  dep.on();
162
169
  }
163
170
  return () => {
164
- var _a;
165
171
  active = false;
166
172
  for (const dep of deps) {
167
173
  dep.off();
168
174
  }
169
175
  if (connection) {
170
176
  connection.active = false;
171
- (_a = connection.cancel) == null ? void 0 : _a.call(connection);
177
+ connection.cancel?.();
172
178
  q.clear();
173
179
  if ("state" in store) {
174
180
  store.state.set((state) => ({
@@ -184,10 +190,10 @@ function calculatedValue(store, notify) {
184
190
  const value2 = dep.get();
185
191
  let cancel;
186
192
  const on = () => {
187
- cancel || (cancel = dep.subscribe(() => store.invalidate(), { runNow: false }));
193
+ cancel ||= dep.subscribe(() => store.invalidate(), { runNow: false });
188
194
  };
189
195
  const off = () => {
190
- cancel == null ? void 0 : cancel();
196
+ cancel?.();
191
197
  cancel = void 0;
192
198
  };
193
199
  deps.push({ store: dep, value: value2, on, off });
@@ -203,20 +209,20 @@ function calculatedValue(store, notify) {
203
209
  }
204
210
  const actions = {
205
211
  set(_value) {
206
- (connection == null ? void 0 : connection.active) && q(() => {
212
+ connection?.active && q(() => {
207
213
  value = _value;
208
214
  notify();
209
215
  });
210
216
  },
211
217
  updateValue(update) {
212
- (connection == null ? void 0 : connection.active) && q(async () => {
218
+ connection?.active && q(async () => {
213
219
  if (update instanceof Function) {
214
220
  update = update(await value);
215
221
  }
216
222
  if (isPromise(update)) {
217
223
  update = await update;
218
224
  }
219
- if (!(connection == null ? void 0 : connection.active)) {
225
+ if (!connection?.active) {
220
226
  return;
221
227
  }
222
228
  value = PromiseWithState.resolve(update);
@@ -224,13 +230,13 @@ function calculatedValue(store, notify) {
224
230
  });
225
231
  },
226
232
  updateError(error) {
227
- (connection == null ? void 0 : connection.active) && q(() => {
233
+ connection?.active && q(() => {
228
234
  value = PromiseWithState.reject(error);
229
235
  notify();
230
236
  });
231
237
  },
232
238
  updateIsConnected(isConnected) {
233
- if (!(connection == null ? void 0 : connection.active)) {
239
+ if (!connection?.active) {
234
240
  return;
235
241
  }
236
242
  if (isConnected) {
@@ -243,13 +249,13 @@ function calculatedValue(store, notify) {
243
249
  });
244
250
  },
245
251
  close() {
246
- (connection == null ? void 0 : connection.active) && store.invalidate();
252
+ connection?.active && store.invalidate();
247
253
  }
248
254
  };
249
255
  connection = { active: true };
250
256
  let _cancel = createConnection(actions);
251
257
  connection.cancel = () => {
252
- _cancel == null ? void 0 : _cancel();
258
+ _cancel?.();
253
259
  _cancel = void 0;
254
260
  };
255
261
  if (!connection.active) {
@@ -275,14 +281,13 @@ function calculatedValue(store, notify) {
275
281
  }
276
282
  }
277
283
  function stop() {
278
- var _a;
279
284
  cancelEffect();
280
285
  whenExecuted.resolve();
281
286
  whenConnected.resolve();
282
287
  ac.abort();
283
288
  if (connection) {
284
289
  connection.active = false;
285
- (_a = connection.cancel) == null ? void 0 : _a.call(connection);
290
+ connection.cancel?.();
286
291
  q.clear();
287
292
  }
288
293
  }
@@ -308,6 +313,7 @@ function staticValue(value) {
308
313
  invalidateDependencies: () => void 0
309
314
  };
310
315
  }
316
+
311
317
  function makeSelector(selector) {
312
318
  if (!selector) {
313
319
  return (x) => x;
@@ -317,6 +323,7 @@ function makeSelector(selector) {
317
323
  }
318
324
  return (x) => propAccess.get(x, selector);
319
325
  }
326
+
320
327
  class Callable extends Function {
321
328
  constructor(_call) {
322
329
  super("...args", "return this._call(...args)");
@@ -324,6 +331,7 @@ class Callable extends Function {
324
331
  return this.bind(this);
325
332
  }
326
333
  }
334
+
327
335
  function debounce(action, options) {
328
336
  const wait = typeof options === "object" && "wait" in options ? calcDuration(options.wait) : calcDuration(options);
329
337
  const maxWait = typeof options === "object" && "maxWait" in options && options.maxWait !== void 0 ? calcDuration(options.maxWait) : void 0;
@@ -334,7 +342,7 @@ function debounce(action, options) {
334
342
  if (timeout !== void 0) {
335
343
  clearTimeout(timeout);
336
344
  }
337
- run == null ? void 0 : run();
345
+ run?.();
338
346
  }
339
347
  function cancel() {
340
348
  if (timeout !== void 0) {
@@ -349,7 +357,7 @@ function debounce(action, options) {
349
357
  }
350
358
  function debounce2(...args) {
351
359
  const now = Date.now();
352
- timeoutStarted ?? (timeoutStarted = now);
360
+ timeoutStarted ??= now;
353
361
  const deadline = Math.min(
354
362
  //
355
363
  now + wait,
@@ -368,24 +376,28 @@ function debounce(action, options) {
368
376
  }
369
377
  return Object.assign(debounce2, { flush, cancel, isScheduled });
370
378
  }
379
+
371
380
  function disposable(dispose) {
372
381
  return Object.assign(
373
382
  dispose,
374
383
  Symbol.dispose ? { [Symbol.dispose]: dispose } : {}
375
384
  );
376
385
  }
386
+
377
387
  function forwardError(error) {
378
388
  setTimeout(() => {
379
389
  throw error;
380
390
  });
381
391
  }
392
+
382
393
  class PromiseCancelError extends Error {
383
394
  constructor() {
384
395
  super("cancelled");
385
396
  }
386
397
  }
387
- const _PromiseWithCancel = class _PromiseWithCancel extends Promise {
398
+ class PromiseWithCancel extends Promise {
388
399
  constructor(executor) {
400
+ autobind(PromiseWithCancel);
389
401
  const abortController = new AbortController();
390
402
  super((resolve, reject) => {
391
403
  executor(resolve, reject, abortController.signal);
@@ -398,9 +410,8 @@ const _PromiseWithCancel = class _PromiseWithCancel extends Promise {
398
410
  cancel(reason = new PromiseCancelError()) {
399
411
  this.abortController.abort(reason);
400
412
  }
401
- };
402
- /* @__PURE__ */ autobind(_PromiseWithCancel);
403
- let PromiseWithCancel = _PromiseWithCancel;
413
+ }
414
+
404
415
  function createArrayAction(prop) {
405
416
  return function arrayAction(...args) {
406
417
  const newArray = this.get().slice();
@@ -454,6 +465,7 @@ const setMethods = {
454
465
  this.set(/* @__PURE__ */ new Set());
455
466
  }
456
467
  };
468
+
457
469
  function throttle(action, duration) {
458
470
  const ms = calcDuration(duration);
459
471
  let t = 0;
@@ -474,10 +486,11 @@ function throttle(action, duration) {
474
486
  }, dt);
475
487
  };
476
488
  }
489
+
477
490
  function noop() {
478
491
  return void 0;
479
492
  }
480
- const _Store = class _Store extends Callable {
493
+ class Store extends Callable {
481
494
  constructor(getter, options = {}, derivedFrom, _call = () => void 0) {
482
495
  super(_call);
483
496
  this.getter = getter;
@@ -487,20 +500,19 @@ const _Store = class _Store extends Callable {
487
500
  this.listeners = /* @__PURE__ */ new Map();
488
501
  this.effects = /* @__PURE__ */ new Map();
489
502
  this.notifyId = {};
503
+ autobind(Store);
490
504
  if (typeof getter !== "function") {
491
505
  this.calculatedValue = this.defaultValue = staticValue(getter);
492
506
  }
493
507
  }
494
508
  get() {
495
- var _a;
496
- (_a = this.calculatedValue) == null ? void 0 : _a.check();
509
+ this.calculatedValue?.check();
497
510
  if (!this.calculatedValue) {
498
511
  this.calculatedValue = calculatedValue(this, this.notify);
499
512
  }
500
513
  return this.calculatedValue.value;
501
514
  }
502
515
  set(...args) {
503
- var _a;
504
516
  const path = args.length > 1 ? args[0] : [];
505
517
  let update = args.length > 1 ? args[1] : args[0];
506
518
  if (update instanceof Function) {
@@ -515,16 +527,15 @@ const _Store = class _Store extends Callable {
515
527
  this.derivedFrom.updater(update);
516
528
  return;
517
529
  }
518
- (_a = this.calculatedValue) == null ? void 0 : _a.stop();
530
+ this.calculatedValue?.stop();
519
531
  this.calculatedValue = staticValue(update);
520
532
  this.notify();
521
533
  }
522
534
  invalidate(recursive) {
523
- var _a, _b;
524
535
  if (recursive) {
525
- (_a = this.calculatedValue) == null ? void 0 : _a.invalidateDependencies(recursive);
536
+ this.calculatedValue?.invalidateDependencies(recursive);
526
537
  }
527
- (_b = this.calculatedValue) == null ? void 0 : _b.stop();
538
+ this.calculatedValue?.stop();
528
539
  this.calculatedValue = this.defaultValue;
529
540
  this.notify();
530
541
  }
@@ -539,7 +550,6 @@ const _Store = class _Store extends Callable {
539
550
  let isSetup = false;
540
551
  let previousValue;
541
552
  let innerListener = () => {
542
- var _a;
543
553
  if (!isSetup) {
544
554
  return;
545
555
  }
@@ -550,8 +560,8 @@ const _Store = class _Store extends Callable {
550
560
  if (previousValue && equals(value.value, previousValue.value)) {
551
561
  return;
552
562
  }
553
- const _previousValue = previousValue == null ? void 0 : previousValue.value;
554
- previousValue = this.calculatedValue && { value: (_a = this.calculatedValue) == null ? void 0 : _a.value };
563
+ const _previousValue = previousValue?.value;
564
+ previousValue = this.calculatedValue && { value: this.calculatedValue?.value };
555
565
  try {
556
566
  listener(value.value, _previousValue);
557
567
  } catch (error) {
@@ -584,7 +594,6 @@ const _Store = class _Store extends Callable {
584
594
  const condition = args[0] instanceof Function ? args[0] : Boolean;
585
595
  const options = args[0] instanceof Function ? args[1] : args[0];
586
596
  return new PromiseWithCancel((resolve, reject, signal) => {
587
- var _a;
588
597
  let stopped = false;
589
598
  let timer;
590
599
  const cancel = this.subscribe(
@@ -605,12 +614,11 @@ const _Store = class _Store extends Callable {
605
614
  return;
606
615
  }
607
616
  signal.addEventListener("abort", cancel);
608
- (_a = options == null ? void 0 : options.signal) == null ? void 0 : _a.addEventListener("abort", () => {
609
- var _a2;
617
+ options?.signal?.addEventListener("abort", () => {
610
618
  cancel();
611
- reject(((_a2 = options.signal) == null ? void 0 : _a2.reason) ?? new Error("cancelled"));
619
+ reject(options.signal?.reason ?? new Error("cancelled"));
612
620
  });
613
- if ((options == null ? void 0 : options.timeout) !== void 0) {
621
+ if (options?.timeout !== void 0) {
614
622
  timer = setTimeout(() => {
615
623
  cancel();
616
624
  reject(new Error("timeout"));
@@ -641,7 +649,7 @@ const _Store = class _Store extends Callable {
641
649
  }
642
650
  }
643
651
  };
644
- return new _Store(
652
+ return new Store(
645
653
  ({ use }) => {
646
654
  return selector(use(this));
647
655
  },
@@ -666,7 +674,7 @@ const _Store = class _Store extends Callable {
666
674
  });
667
675
  return () => {
668
676
  const { handle, timeout } = this.effects.get(effect) ?? {};
669
- handle == null ? void 0 : handle();
677
+ handle?.();
670
678
  if (timeout !== void 0) {
671
679
  clearTimeout(timeout);
672
680
  }
@@ -696,7 +704,7 @@ const _Store = class _Store extends Callable {
696
704
  return;
697
705
  for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {
698
706
  if (!retain) {
699
- handle == null ? void 0 : handle();
707
+ handle?.();
700
708
  if (timeout !== void 0) {
701
709
  clearTimeout(timeout);
702
710
  }
@@ -732,16 +740,14 @@ const _Store = class _Store extends Callable {
732
740
  break;
733
741
  }
734
742
  }
735
- };
736
- /* @__PURE__ */ autobind(_Store);
737
- let Store = _Store;
743
+ }
738
744
  function create(initialState, options) {
739
745
  options = { ...createStore.defaultOptions, ...options };
740
746
  const store = new Store(initialState, options);
741
747
  if (initialState instanceof Function) {
742
748
  return store;
743
749
  }
744
- let methods = options == null ? void 0 : options.methods;
750
+ let methods = options?.methods;
745
751
  if (initialState instanceof Map) {
746
752
  methods = { ...mapMethods, ...methods };
747
753
  } else if (initialState instanceof Set) {
@@ -761,6 +767,7 @@ const createStore = /* @__PURE__ */ Object.assign(create, {
761
767
  equals: propAccess.deepEqual
762
768
  }
763
769
  });
770
+
764
771
  exports.PromiseWithState = PromiseWithState;
765
772
  exports.Store = Store;
766
773
  exports.arrayMethods = arrayMethods;
@@ -1 +1 @@
1
- {"version":3,"file":"store.cjs","sources":["../../src/lib/autobind.ts","../../src/lib/calcDuration.ts","../../src/lib/deferred.ts","../../src/lib/isPromise.ts","../../src/lib/queue.ts","../../src/lib/promiseWithState.ts","../../src/lib/calculatedValue.ts","../../src/lib/makeSelector.ts","../../src/lib/callable.ts","../../src/lib/debounce.ts","../../src/lib/disposable.ts","../../src/lib/forwardError.ts","../../src/lib/promiseWithCancel.ts","../../src/lib/standardMethods.ts","../../src/lib/throttle.ts","../../src/core/store.ts"],"sourcesContent":["const marker = Symbol('autobind');\n\nexport const autobind = <\n TClass extends abstract new (...args: any) => any = abstract new (...args: any) => any,\n>(\n _class: TClass,\n): TClass => {\n for (const key of Reflect.ownKeys(_class.prototype)) {\n if (key === 'constructor') {\n continue;\n }\n\n const descriptor = Reflect.getOwnPropertyDescriptor(_class.prototype, key);\n let method = descriptor?.get?.() ?? descriptor?.value;\n let isBinding = false;\n\n if (typeof method !== 'function' || method[marker]) {\n continue;\n }\n\n Reflect.defineProperty(_class.prototype, key, {\n configurable: true,\n get() {\n if (\n isBinding ||\n this === _class.prototype ||\n Object.prototype.hasOwnProperty.call(this, key) ||\n typeof method !== 'function'\n ) {\n return method;\n }\n\n const boundMethod = (...args: any[]) => Reflect.apply(method, this, args);\n boundMethod[marker] = true;\n isBinding = true;\n\n Object.defineProperty(this, key, {\n configurable: true,\n get() {\n return boundMethod;\n },\n });\n\n isBinding = false;\n return boundMethod;\n },\n set(v) {\n method = v;\n },\n });\n }\n\n return _class;\n};\n","import type { Duration } from '../core/commonTypes';\n\nexport function calcDuration(t: Duration): number {\n if (typeof t === 'number') return t;\n return (\n (t.milliseconds ?? 0) +\n (t.seconds ?? 0) * 1000 +\n (t.minutes ?? 0) * 60 * 1000 +\n (t.hours ?? 0) * 60 * 60 * 1000 +\n (t.days ?? 0) * 24 * 60 * 60 * 1000\n );\n}\n","export class Deferred<T = void> extends Promise<T> {\n static get [Symbol.species](): typeof Promise {\n return Promise;\n }\n\n resolve: (value: T | PromiseLike<T>) => void = () => undefined;\n reject: (reason?: any) => void = () => undefined;\n\n constructor() {\n const that = {};\n\n super((resolve, reject) => {\n Object.assign(that, { resolve, reject });\n });\n\n Object.assign(this, that);\n }\n}\n","export default function isPromise(value: unknown): value is Promise<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n );\n}\n","import isPromise from '@lib/isPromise';\nimport type { MaybePromise } from './maybePromise';\nimport type { Listener } from '@core';\n\ntype Action<T> = () => MaybePromise<T>;\n\nexport interface Queue {\n <T>(action: Action<T>, ref?: any): Promise<T>;\n clear: () => void;\n whenDone: () => Promise<void>;\n size: number;\n getRefs: () => any[];\n}\n\nexport function queue(): Queue {\n const q: {\n action: Action<any>;\n resolve: (value: any) => void;\n reject: (error: unknown) => void;\n ref?: any;\n }[] = [];\n const completionListeners = new Set<Listener<void>>();\n let active = false;\n\n const notify = () => {\n for (const listener of completionListeners) {\n listener();\n }\n\n completionListeners.clear();\n };\n\n const run = async () => {\n if (!active) {\n active = true;\n\n let next;\n while ((next = q.shift())) {\n try {\n let result = next.action();\n if (isPromise(result)) {\n result = await result;\n }\n\n next.resolve(result);\n } catch (error) {\n next.reject(error);\n }\n }\n\n active = false;\n notify();\n }\n };\n\n return Object.assign(\n <T>(action: Action<T>, ref?: any) => {\n return new Promise<T>((resolve, reject) => {\n q.push({ action, resolve, reject, ref });\n run();\n });\n },\n {\n clear() {\n q.length = 0;\n },\n\n whenDone() {\n if (!active) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n completionListeners.add(resolve);\n });\n },\n\n get size() {\n return q.length;\n },\n\n getRefs() {\n return q.map((item) => item.ref).filter((x) => x !== undefined);\n },\n },\n );\n}\n","import isPromise from '@lib/isPromise';\nimport { type ErrorState, type PendingState, type ValueState } from './cacheState';\nimport { type MaybePromise } from './maybePromise';\n\nexport class PromiseWithState<T> extends Promise<T> {\n static get [Symbol.species](): typeof Promise {\n return Promise;\n }\n\n static override resolve(): PromiseWithState<void>;\n\n static override resolve<T>(value: MaybePromise<T>): PromiseWithState<T>;\n\n static override resolve<T>(value?: MaybePromise<T>) {\n return new PromiseWithState<T>(value as MaybePromise<T>);\n }\n\n static override reject<T = never>(error: unknown): PromiseWithState<T> {\n return new PromiseWithState<T>(Promise.reject(error), { status: 'error', error });\n }\n\n constructor(\n value: MaybePromise<T>,\n public state: ValueState<T> | ErrorState | PendingState = { status: 'pending' },\n ) {\n super((resolve) => resolve(value));\n\n if (isPromise(value)) {\n value\n .then((value) => {\n this.state = { status: 'value', value: value };\n })\n .catch((error) => {\n this.state = { status: 'error', error };\n });\n } else {\n this.state = { status: 'value', value: value };\n }\n }\n}\n","import type { AsyncConnectionActions, Cancel, Connection } from '@core/commonTypes';\nimport type { Store } from '@core/store';\nimport { Deferred } from '@lib/deferred';\nimport { queue } from '@lib/queue';\nimport { deepEqual } from './equals';\nimport { PromiseWithState } from '@lib/promiseWithState';\nimport type { Cache } from '@core';\nimport isPromise from '@lib/isPromise';\n\nexport interface CalculatedValue<T> {\n value: T;\n check: () => void;\n stop(): void;\n invalidateDependencies(recursive?: boolean): void;\n}\n\nexport function calculatedValue<T>(store: Store<T>, notify: () => void): CalculatedValue<T> {\n let active = false;\n const deps = new Array<{ store: Store<any>; value: any; on: () => void; off: () => void }>();\n let value: T | undefined;\n const whenConnected = new Deferred();\n const whenExecuted = new Deferred();\n const ac = new AbortController();\n let connection: { active: boolean; cancel?: Cancel } | undefined;\n const q = queue();\n q(() => whenExecuted);\n\n const cancelEffect = store.addEffect(() => {\n if (connection) {\n store.invalidate();\n return;\n }\n\n active = true;\n\n for (const dep of deps) {\n dep.on();\n }\n\n return () => {\n active = false;\n\n for (const dep of deps) {\n dep.off();\n }\n\n if (connection) {\n connection.active = false;\n connection.cancel?.();\n q.clear();\n\n if ('state' in store) {\n (store as unknown as Cache<any>).state.set((state) => ({\n ...state,\n isConnected: false,\n isStale: true,\n }));\n }\n }\n };\n });\n\n function use<S>(dep: Store<S>) {\n const value = dep.get();\n let cancel: Cancel | undefined;\n\n const on = () => {\n cancel ||= dep.subscribe(() => store.invalidate(), { runNow: false });\n };\n\n const off = () => {\n cancel?.();\n cancel = undefined;\n };\n\n deps.push({ store: dep, value, on, off });\n\n if (active) {\n on();\n }\n\n return value;\n }\n\n async function connect(createConnection: Connection<T>) {\n if (!active) {\n connection = { active: false };\n return;\n }\n\n const actions: AsyncConnectionActions<any> = {\n set(_value) {\n connection?.active &&\n q(() => {\n value = _value;\n notify();\n });\n },\n updateValue(update) {\n connection?.active &&\n q(async () => {\n if (update instanceof Function) {\n update = update(await value);\n }\n\n if (isPromise(update)) {\n update = await update;\n }\n\n if (!connection?.active) {\n return;\n }\n\n value = PromiseWithState.resolve(update) as T;\n notify();\n });\n },\n updateError(error) {\n connection?.active &&\n q(() => {\n value = PromiseWithState.reject(error) as T;\n notify();\n });\n },\n updateIsConnected(isConnected) {\n if (!connection?.active) {\n return;\n }\n\n if (isConnected) {\n whenConnected.resolve();\n }\n\n q(() => {\n if ('state' in store) {\n (store as unknown as Cache<any>).state.set('isConnected', isConnected);\n }\n });\n },\n close() {\n connection?.active && store.invalidate();\n },\n };\n\n connection = { active: true };\n let _cancel: Cancel | undefined = createConnection(actions as any);\n\n connection.cancel = () => {\n _cancel?.();\n _cancel = undefined;\n };\n\n if (!connection.active) {\n connection.cancel();\n }\n\n return whenConnected;\n }\n\n value =\n store.getter instanceof Function\n ? store.getter({ signal: ac.signal, use, connect })\n : store.getter;\n\n if (isPromise(value)) {\n value.finally(() => whenExecuted.resolve()).catch(() => undefined);\n } else {\n whenExecuted.resolve();\n }\n\n function check() {\n if (active) {\n return;\n }\n\n for (const dep of deps) {\n if (!deepEqual(dep.store.get(), dep.value)) {\n store.invalidate();\n return;\n }\n }\n }\n\n function stop() {\n cancelEffect();\n whenExecuted.resolve();\n whenConnected.resolve();\n ac.abort();\n\n if (connection) {\n connection.active = false;\n connection.cancel?.();\n q.clear();\n }\n }\n\n function invalidateDependencies(recursive?: boolean) {\n for (const dep of deps) {\n dep.store.invalidate(recursive);\n }\n }\n\n return {\n get value() {\n return value!;\n },\n check,\n stop,\n invalidateDependencies,\n };\n}\n\nexport function staticValue<T>(value: T): CalculatedValue<T> {\n return {\n value,\n check: () => undefined,\n stop: () => undefined,\n invalidateDependencies: () => undefined,\n };\n}\n","import type { Path } from './path';\nimport { get } from './propAccess';\n\nexport function makeSelector<T, S>(selector?: ((value: T) => S) | Path<any>): (value: T) => S {\n if (!selector) {\n return (x) => x as any;\n }\n\n if (selector instanceof Function) {\n return selector;\n }\n\n return (x) => get(x, selector as any) as any;\n}\n","export class Callable<Args extends any[], T> extends Function {\n constructor(protected _call: (...args: Args) => T) {\n super('...args', 'return this._call(...args)');\n\n // eslint-disable-next-line no-constructor-return\n return this.bind(this);\n }\n}\n","import { calcDuration } from './calcDuration';\nimport type { Duration } from '@core';\n\nexport type DebounceOptions =\n | Duration\n | {\n wait: Duration;\n maxWait?: Duration;\n };\n\nexport function debounce<Args extends any[]>(\n action: (...args: Args) => void,\n options: Duration | DebounceOptions,\n): {\n (...args: Args): void;\n flush(): void;\n cancel(): void;\n isScheduled(): boolean;\n} {\n const wait =\n typeof options === 'object' && 'wait' in options\n ? calcDuration(options.wait)\n : calcDuration(options);\n\n const maxWait =\n typeof options === 'object' && 'maxWait' in options && options.maxWait !== undefined\n ? calcDuration(options.maxWait)\n : undefined;\n\n let run: (() => void) | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let timeoutStarted: number | undefined;\n\n function flush() {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run?.();\n }\n\n function cancel() {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run = undefined;\n timeout = undefined;\n timeoutStarted = undefined;\n }\n\n function isScheduled() {\n return timeout !== undefined;\n }\n\n function debounce(...args: Args) {\n const now = Date.now();\n timeoutStarted ??= now;\n\n const deadline = Math.min(\n //\n now + wait,\n timeoutStarted + (maxWait ?? Number.POSITIVE_INFINITY),\n );\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run = () => {\n run = undefined;\n timeout = undefined;\n timeoutStarted = undefined;\n\n action(...args);\n };\n\n timeout = setTimeout(run, deadline - now);\n }\n\n return Object.assign(debounce, { flush, cancel, isScheduled });\n}\n","import type { Cancel } from '@core';\nimport type { DisposableCancel } from '@core/commonTypes';\n\nexport default function disposable(dispose: Cancel): DisposableCancel {\n return Object.assign(\n dispose,\n Symbol.dispose ? { [Symbol.dispose]: dispose } : {},\n ) as DisposableCancel;\n}\n","export function forwardError(error: unknown): void {\n setTimeout(() => {\n throw error;\n });\n}\n","import { autobind } from '@lib/autobind';\n\nexport class PromiseCancelError extends Error {\n constructor() {\n super('cancelled');\n }\n}\n\nexport class PromiseWithCancel<T> extends Promise<T> {\n static {\n /* @__PURE__ */ autobind(PromiseWithCancel);\n }\n\n private abortController;\n\n constructor(\n executor: (\n resolve: (value: T) => void,\n reject: (error: unknown) => void,\n signal: AbortSignal,\n ) => void,\n ) {\n const abortController = new AbortController();\n\n super((resolve, reject) => {\n executor(resolve, reject, abortController.signal);\n\n abortController.signal.addEventListener('abort', (e) => {\n reject(abortController.signal.reason);\n });\n });\n\n this.abortController = abortController;\n }\n\n cancel(reason: any = new PromiseCancelError()): void {\n this.abortController.abort(reason);\n }\n}\n","import type { Store } from '../core/store';\nimport type { OptionalPropertyOf } from './typeHelpers';\n\ntype Function_ = (...args: any) => any;\n\nfunction createArrayAction<P extends keyof Array<any>>(prop: P) {\n return function arrayAction<T extends Array<any>>(\n this: Store<T>,\n ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n ): T[P] extends Function_ ? ReturnType<T[P]> : never {\n const newArray = this.get().slice() as T;\n const result = (newArray[prop] as Function_)(...(args as any));\n this.set(newArray);\n return result;\n };\n}\nexport const arrayMethods: {\n [P in 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | 'reverse' | 'sort']: <\n T extends Array<any>,\n >(\n this: Store<T>,\n ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n ) => T[P] extends Function_ ? ReturnType<T[P]> : never;\n} = {\n splice: /* @__PURE__ */ createArrayAction('splice'),\n push: /* @__PURE__ */ createArrayAction('push'),\n pop: /* @__PURE__ */ createArrayAction('pop'),\n shift: /* @__PURE__ */ createArrayAction('shift'),\n unshift: /* @__PURE__ */ createArrayAction('unshift'),\n reverse: /* @__PURE__ */ createArrayAction('reverse'),\n sort: /* @__PURE__ */ createArrayAction('sort'),\n};\n\nexport const recordMethods = {\n delete<T extends Record<any, any>, K extends OptionalPropertyOf<T>>(\n this: Store<T>,\n key: K,\n ): void {\n const copy = { ...this.get() };\n delete copy[key];\n this.set(copy);\n },\n\n clear<T extends Record<any, any>>(this: Store<Partial<T>>): void {\n this.set({} as T);\n },\n};\n\nexport const mapMethods = {\n delete<K, V>(this: Store<Map<K, V>>, key: K): boolean {\n const newMap = new Map(this.get());\n const result = newMap.delete(key);\n this.set(newMap);\n return result;\n },\n\n clear<K, V>(this: Store<Map<K, V>>): void {\n this.set(new Map());\n },\n};\n\nexport const setMethods = {\n add<T>(this: Store<Set<T>>, value: T): void {\n const newSet = new Set(this.get());\n newSet.add(value);\n this.set(newSet);\n },\n\n delete<T>(this: Store<Set<T>>, value: T): void {\n const newSet = new Set(this.get());\n newSet.delete(value);\n this.set(newSet);\n },\n\n clear<T>(this: Store<Set<T>>): void {\n this.set(new Set());\n },\n};\n","import { calcDuration } from './calcDuration';\nimport type { Duration } from '@core';\n\nexport function throttle<Args extends any[]>(\n action: (...args: Args) => void,\n duration: Duration,\n): (...args: Args) => void {\n const ms = calcDuration(duration);\n\n let t = 0;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n return (...args: Args) => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n const dt = t + ms - Date.now();\n if (dt <= 0) {\n action(...args);\n t = Date.now();\n return;\n }\n\n timeout = setTimeout(() => {\n action(...args);\n t = Date.now();\n }, dt);\n };\n}\n","import { autobind } from '@lib/autobind';\nimport { calcDuration } from '@lib/calcDuration';\nimport { calculatedValue, staticValue, type CalculatedValue } from '@lib/calculatedValue';\nimport { Callable } from '@lib/callable';\nimport { debounce } from '@lib/debounce';\nimport disposable from '@lib/disposable';\nimport { deepEqual } from '@lib/equals';\nimport { forwardError } from '@lib/forwardError';\nimport { isObject } from '@lib/helpers';\nimport { makeSelector } from '@lib/makeSelector';\nimport type { Path, SettablePath, Value } from '@lib/path';\nimport { PromiseWithCancel } from '@lib/promiseWithCancel';\nimport { get, set } from '@lib/propAccess';\nimport { arrayMethods, mapMethods, recordMethods, setMethods } from '@lib/standardMethods';\nimport { throttle } from '@lib/throttle';\nimport type {\n CalculationActions,\n Cancel,\n DisposableCancel,\n Duration,\n Effect,\n Listener,\n Selector,\n SubscribeOptions,\n Update,\n} from './commonTypes';\n\nexport type StoreMethods = Record<string, (...args: any[]) => any>;\n\nexport type BoundStoreMethods<T, Methods extends StoreMethods> = Methods &\n ThisType<Store<T> & Methods>;\n\nexport interface StoreOptions {\n retain?: Duration;\n equals?: SubscribeOptions['equals'];\n}\n\nexport interface StoreOptionsWithMethods<T, Methods extends StoreMethods> extends StoreOptions {\n methods?: Methods & ThisType<Store<T> & Methods & StandardMethods<T>>;\n}\n\nexport type Calculate<T> = (helpers: CalculationActions<T>) => T;\n\ntype StandardMethods<T> =\n T extends Map<any, any>\n ? typeof mapMethods\n : T extends Set<any>\n ? typeof setMethods\n : T extends Array<any>\n ? typeof arrayMethods\n : T extends Record<any, any>\n ? typeof recordMethods\n : Record<string, never>;\n\ntype StoreWithMethods<T, Methods extends StoreMethods> = Store<T> &\n Omit<BoundStoreMethods<T, Methods>, keyof Store<T>> &\n StandardMethods<T>;\n\nexport interface OnceOptions {\n signal?: AbortSignal;\n timeout?: Duration;\n}\n\nfunction noop() {\n return undefined;\n}\n\nexport class Store<T> extends Callable<any, any> {\n static {\n /* @__PURE__ */ autobind(Store);\n }\n\n protected calculatedValue?: CalculatedValue<T>;\n protected defaultValue?: CalculatedValue<T>;\n\n protected listeners: Map<Listener, boolean> = new Map();\n\n protected effects: Map<\n Effect,\n { handle?: Cancel; retain?: number; timeout?: ReturnType<typeof setTimeout> }\n > = new Map();\n\n protected notifyId = {};\n\n constructor(\n public readonly getter: T | Calculate<T>,\n public readonly options: StoreOptions = {},\n public readonly derivedFrom?: {\n store: Store<any>;\n selectors: (Selector<any, any> | Path<any>)[];\n updater: (state: any) => void;\n },\n protected readonly _call: (...args: any[]) => any = () => undefined,\n ) {\n super(_call);\n\n if (typeof getter !== 'function') {\n this.calculatedValue = this.defaultValue = staticValue(getter);\n }\n }\n\n get(): T {\n this.calculatedValue?.check();\n\n if (!this.calculatedValue) {\n this.calculatedValue = calculatedValue(this, this.notify);\n }\n\n return this.calculatedValue.value;\n }\n\n set(update: Update<T>): void;\n\n set<const P extends Path<T>>(path: P, update: Update<Value<T, P>>): void;\n\n set(...args: any[]): void {\n const path: any = args.length > 1 ? args[0] : [];\n let update: Update<any> = args.length > 1 ? args[1] : args[0];\n\n if (update instanceof Function) {\n const before = this.get();\n const valueBefore = get(before, path);\n const valueAfter = update(valueBefore);\n update = set(before, path, valueAfter);\n } else if (path.length > 0) {\n update = set(this.get(), path, update);\n }\n\n if (this.derivedFrom) {\n this.derivedFrom.updater(update);\n return;\n }\n\n this.calculatedValue?.stop();\n this.calculatedValue = staticValue(update);\n this.notify();\n }\n\n invalidate(recursive?: boolean): void {\n if (recursive) {\n this.calculatedValue?.invalidateDependencies(recursive);\n }\n\n this.calculatedValue?.stop();\n this.calculatedValue = this.defaultValue;\n this.notify();\n }\n\n subscribe(listener: Listener<T>, options?: SubscribeOptions): DisposableCancel {\n const {\n passive,\n runNow = true,\n throttle: throttleOption,\n debounce: debounceOption,\n equals = deepEqual,\n } = options ?? {};\n\n let isSetup = false;\n let previousValue: { value: T } | undefined;\n\n let innerListener = () => {\n if (!isSetup) {\n return;\n }\n\n const value = passive ? this.calculatedValue : { value: this.get() };\n\n if (!value) {\n return;\n }\n\n if (previousValue && equals(value.value, previousValue.value)) {\n return;\n }\n\n const _previousValue = previousValue?.value;\n previousValue = this.calculatedValue && { value: this.calculatedValue?.value };\n\n try {\n listener(value.value, _previousValue);\n } catch (error) {\n forwardError(error);\n }\n };\n\n if (throttleOption) {\n innerListener = throttle(innerListener, throttleOption);\n } else if (debounceOption) {\n innerListener = debounce(innerListener, debounceOption);\n }\n\n this.listeners.set(innerListener, !passive);\n if (!passive) {\n this.onSubscribe();\n }\n\n isSetup = true;\n\n if (runNow) {\n innerListener();\n } else {\n previousValue = passive\n ? this.calculatedValue && { value: this.calculatedValue.value }\n : { value: this.get() };\n }\n\n return disposable(() => {\n this.listeners.delete(innerListener);\n if (!passive) {\n this.onUnsubscribe();\n }\n });\n }\n\n once<S extends T>(\n condition: (value: T) => value is S,\n options?: OnceOptions,\n ): PromiseWithCancel<S>;\n\n once(condition: (value: T) => boolean, options?: OnceOptions): PromiseWithCancel<T>;\n\n once(options?: OnceOptions): PromiseWithCancel<T>;\n\n once(\n ...args: [condition: (value: any) => boolean, options?: OnceOptions] | [options?: OnceOptions]\n ): PromiseWithCancel<any> {\n const condition = args[0] instanceof Function ? args[0] : Boolean;\n const options = args[0] instanceof Function ? args[1] : args[0];\n\n return new PromiseWithCancel<T>((resolve, reject, signal) => {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const cancel = this.subscribe(\n (value) => {\n if (stopped || !condition(value)) {\n return;\n }\n\n resolve(value);\n stopped = true;\n timer && clearTimeout(timer);\n setTimeout(() => cancel());\n },\n {\n runNow: !!condition,\n },\n );\n\n if (stopped) {\n return;\n }\n\n signal.addEventListener('abort', cancel);\n\n options?.signal?.addEventListener('abort', () => {\n cancel();\n reject(options.signal?.reason ?? new Error('cancelled'));\n });\n\n if (options?.timeout !== undefined) {\n timer = setTimeout(() => {\n cancel();\n reject(new Error('timeout'));\n }, calcDuration(options.timeout));\n }\n });\n }\n\n map<S>(selector: Selector<T, S>, updater?: (value: S) => Update<T>): Store<S>;\n\n map<P extends SettablePath<T>>(selector: P): Store<Value<T, P>>;\n\n map(_selector: Selector<T, any> | SettablePath<any>, ...args: any[]): Store<any> {\n const updater: ((value: any) => Update<T>) | undefined =\n _selector instanceof Function\n ? args[0]\n : (value) => (state) => set(state, _selector as SettablePath<T>, value);\n\n const selector = makeSelector(_selector);\n\n const derivedFrom = {\n store: this.derivedFrom ? this.derivedFrom.store : this,\n selectors: this.derivedFrom ? [...this.derivedFrom.selectors, _selector] : [_selector],\n\n updater: (value: any) => {\n if (!updater) {\n throw new TypeError(\n 'Can only update computed stores that either are derived from other stores using string selectors or have an updater function.',\n );\n }\n\n let update = updater(value);\n\n if (update instanceof Function) {\n update = update(this.get());\n }\n\n if (this.derivedFrom) {\n this.derivedFrom.updater(update);\n } else {\n this.set(update);\n }\n },\n };\n\n return new Store(\n ({ use }) => {\n return selector(use(this));\n },\n this.options,\n derivedFrom,\n );\n }\n\n /** Add an effect that will be executed when the store becomes active, which means when it has at least one subscriber.\n * @param effect\n * If there is already a subscriber, the effect will be executed immediately.\n * Otherweise it will be executed as soon as the first subscription is created.\n * Every time all subscriptions are removed and the first is created again, the effect will be executed again.\n * @param retain\n * If provided, delay tearing down effects when the last subscriber is removed. This is useful if a short gap in subscriber coverage is supposed to be ignored. E.g. when switching pages, the old page might unsubscribe, while the new page subscribes immediately after.\n * @returns\n * The effect can return a teardown callback, which will be executed when the last subscription is removed and potentially the ratain time has passed.\n */\n addEffect(effect: Effect, retain: Duration | undefined = this.options.retain): Cancel {\n this.effects.set(effect, {\n handle: this.isActive() ? effect() ?? noop : undefined,\n retain: retain !== undefined ? calcDuration(retain) : undefined,\n });\n\n return () => {\n const { handle, timeout } = this.effects.get(effect) ?? {};\n handle?.();\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.delete(effect);\n };\n }\n\n /** Return whether the store is currently active, which means whether it has at least one subscriber. */\n isActive(): boolean {\n return [...this.listeners.values()].some(Boolean);\n }\n\n protected onSubscribe(): void {\n if ([...this.listeners.values()].filter(Boolean).length > 1) return;\n\n for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.set(effect, {\n handle: handle ?? effect() ?? noop,\n retain,\n timeout: undefined,\n });\n }\n }\n\n protected onUnsubscribe(): void {\n if ([...this.listeners.values()].some(Boolean)) return;\n\n for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n if (!retain) {\n handle?.();\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.set(effect, {\n handle: undefined,\n retain,\n timeout: undefined,\n });\n\n continue;\n }\n\n const newTimeout =\n timeout ??\n (handle\n ? setTimeout(() => {\n handle();\n this.effects.set(effect, {\n handle: undefined,\n retain,\n timeout: undefined,\n });\n }, retain)\n : undefined);\n\n this.effects.set(effect, {\n handle,\n retain,\n timeout: newTimeout,\n });\n }\n }\n\n protected notify(): void {\n const n = {};\n this.notifyId = n;\n\n const snapshot = [...this.listeners.keys()];\n for (const listener of snapshot) {\n listener();\n if (n !== this.notifyId) break;\n }\n }\n}\n\nfunction create<T>(calculate: Calculate<T>, options?: StoreOptions): Store<T>;\nfunction create<T, Methods extends StoreMethods = {}>(\n initialState: T,\n options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods>;\nfunction create<T, Methods extends StoreMethods>(\n initialState: T | Calculate<T>,\n options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods> | Store<T> {\n options = { ...createStore.defaultOptions, ...options };\n\n const store = new Store(initialState, options);\n\n if (initialState instanceof Function) {\n return store;\n }\n\n let methods: StoreMethods | undefined = options?.methods;\n\n if (initialState instanceof Map) {\n methods = { ...mapMethods, ...methods };\n } else if (initialState instanceof Set) {\n methods = { ...setMethods, ...methods };\n } else if (Array.isArray(initialState)) {\n methods = { ...arrayMethods, ...methods };\n } else if (isObject(initialState)) {\n methods = { ...recordMethods, ...methods };\n }\n\n const boundMethods = Object.fromEntries(\n Object.entries(methods ?? ({} as BoundStoreMethods<T, any>))\n .filter(([name]) => !(name in store))\n .map(([name, action]) => [name, (action as any).bind(store)]),\n ) as BoundStoreMethods<T, any>;\n\n return Object.assign(store, boundMethods);\n}\n\nexport const createStore: typeof create & { defaultOptions: StoreOptions } =\n /* @__PURE__ */ Object.assign(create, {\n defaultOptions: {\n equals: deepEqual,\n } as StoreOptions,\n });\n"],"names":["value","deepEqual","get","debounce","set","_a","isObject"],"mappings":"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"}
1
+ {"version":3,"file":"store.cjs","sources":["../../src/lib/autobind.ts","../../src/lib/calcDuration.ts","../../src/lib/deferred.ts","../../src/lib/isPromise.ts","../../src/lib/queue.ts","../../src/lib/promiseWithState.ts","../../src/lib/calculatedValue.ts","../../src/lib/makeSelector.ts","../../src/lib/callable.ts","../../src/lib/debounce.ts","../../src/lib/disposable.ts","../../src/lib/forwardError.ts","../../src/lib/promiseWithCancel.ts","../../src/lib/standardMethods.ts","../../src/lib/throttle.ts","../../src/core/store.ts"],"sourcesContent":["const marker = Symbol('autobind');\n\nexport const autobind = <\n TClass extends abstract new (...args: any) => any = abstract new (...args: any) => any,\n>(\n _class: TClass,\n): TClass => {\n for (const key of Reflect.ownKeys(_class.prototype)) {\n if (key === 'constructor') {\n continue;\n }\n\n const descriptor = Reflect.getOwnPropertyDescriptor(_class.prototype, key);\n let method = descriptor?.get?.() ?? descriptor?.value;\n let isBinding = false;\n\n if (typeof method !== 'function' || method[marker]) {\n continue;\n }\n\n Reflect.defineProperty(_class.prototype, key, {\n configurable: true,\n get() {\n if (\n isBinding ||\n this === _class.prototype ||\n Object.prototype.hasOwnProperty.call(this, key) ||\n typeof method !== 'function'\n ) {\n return method;\n }\n\n const boundMethod = (...args: any[]) => Reflect.apply(method, this, args);\n boundMethod[marker] = true;\n isBinding = true;\n\n Object.defineProperty(this, key, {\n configurable: true,\n get() {\n return boundMethod;\n },\n });\n\n isBinding = false;\n return boundMethod;\n },\n set(v) {\n method = v;\n },\n });\n }\n\n return _class;\n};\n","import type { Duration } from '../core/commonTypes';\n\nexport function calcDuration(t: Duration): number {\n if (typeof t === 'number') return t;\n return (\n (t.milliseconds ?? 0) +\n (t.seconds ?? 0) * 1000 +\n (t.minutes ?? 0) * 60 * 1000 +\n (t.hours ?? 0) * 60 * 60 * 1000 +\n (t.days ?? 0) * 24 * 60 * 60 * 1000\n );\n}\n","export class Deferred<T = void> extends Promise<T> {\n static get [Symbol.species](): typeof Promise {\n return Promise;\n }\n\n resolve: (value: T | PromiseLike<T>) => void = () => undefined;\n reject: (reason?: any) => void = () => undefined;\n\n constructor() {\n const that = {};\n\n super((resolve, reject) => {\n Object.assign(that, { resolve, reject });\n });\n\n Object.assign(this, that);\n }\n}\n","export default function isPromise(value: unknown): value is Promise<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof value.then === 'function'\n );\n}\n","import isPromise from '@lib/isPromise';\nimport type { MaybePromise } from './maybePromise';\nimport type { Listener } from '@core';\n\ntype Action<T> = () => MaybePromise<T>;\n\nexport interface Queue {\n <T>(action: Action<T>, ref?: any): Promise<T>;\n clear: () => void;\n whenDone: () => Promise<void>;\n size: number;\n getRefs: () => any[];\n}\n\nexport function queue(): Queue {\n const q: {\n action: Action<any>;\n resolve: (value: any) => void;\n reject: (error: unknown) => void;\n ref?: any;\n }[] = [];\n const completionListeners = new Set<Listener<void>>();\n let active = false;\n\n const notify = () => {\n for (const listener of completionListeners) {\n listener();\n }\n\n completionListeners.clear();\n };\n\n const run = async () => {\n if (!active) {\n active = true;\n\n let next;\n while ((next = q.shift())) {\n try {\n let result = next.action();\n if (isPromise(result)) {\n result = await result;\n }\n\n next.resolve(result);\n } catch (error) {\n next.reject(error);\n }\n }\n\n active = false;\n notify();\n }\n };\n\n return Object.assign(\n <T>(action: Action<T>, ref?: any) => {\n return new Promise<T>((resolve, reject) => {\n q.push({ action, resolve, reject, ref });\n run();\n });\n },\n {\n clear() {\n q.length = 0;\n },\n\n whenDone() {\n if (!active) {\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n completionListeners.add(resolve);\n });\n },\n\n get size() {\n return q.length;\n },\n\n getRefs() {\n return q.map((item) => item.ref).filter((x) => x !== undefined);\n },\n },\n );\n}\n","import isPromise from '@lib/isPromise';\nimport { type ErrorState, type PendingState, type ValueState } from './cacheState';\nimport { type MaybePromise } from './maybePromise';\n\nexport class PromiseWithState<T> extends Promise<T> {\n static get [Symbol.species](): typeof Promise {\n return Promise;\n }\n\n static override resolve(): PromiseWithState<void>;\n\n static override resolve<T>(value: MaybePromise<T>): PromiseWithState<T>;\n\n static override resolve<T>(value?: MaybePromise<T>) {\n return new PromiseWithState<T>(value as MaybePromise<T>);\n }\n\n static override reject<T = never>(error: unknown): PromiseWithState<T> {\n return new PromiseWithState<T>(Promise.reject(error), { status: 'error', error });\n }\n\n constructor(\n value: MaybePromise<T>,\n public state: ValueState<T> | ErrorState | PendingState = { status: 'pending' },\n ) {\n super((resolve) => resolve(value));\n\n if (isPromise(value)) {\n value\n .then((value) => {\n this.state = { status: 'value', value: value };\n })\n .catch((error) => {\n this.state = { status: 'error', error };\n });\n } else {\n this.state = { status: 'value', value: value };\n }\n }\n}\n","import type { AsyncConnectionActions, Cancel, Connection } from '@core/commonTypes';\nimport type { Store } from '@core/store';\nimport { Deferred } from '@lib/deferred';\nimport { queue } from '@lib/queue';\nimport { deepEqual } from './equals';\nimport { PromiseWithState } from '@lib/promiseWithState';\nimport type { Cache } from '@core';\nimport isPromise from '@lib/isPromise';\n\nexport interface CalculatedValue<T> {\n value: T;\n check: () => void;\n stop(): void;\n invalidateDependencies(recursive?: boolean): void;\n}\n\nexport function calculatedValue<T>(store: Store<T>, notify: () => void): CalculatedValue<T> {\n let active = false;\n const deps = new Array<{ store: Store<any>; value: any; on: () => void; off: () => void }>();\n let value: T | undefined;\n const whenConnected = new Deferred();\n const whenExecuted = new Deferred();\n const ac = new AbortController();\n let connection: { active: boolean; cancel?: Cancel } | undefined;\n const q = queue();\n q(() => whenExecuted);\n\n const cancelEffect = store.addEffect(() => {\n if (connection) {\n store.invalidate();\n return;\n }\n\n active = true;\n\n for (const dep of deps) {\n dep.on();\n }\n\n return () => {\n active = false;\n\n for (const dep of deps) {\n dep.off();\n }\n\n if (connection) {\n connection.active = false;\n connection.cancel?.();\n q.clear();\n\n if ('state' in store) {\n (store as unknown as Cache<any>).state.set((state) => ({\n ...state,\n isConnected: false,\n isStale: true,\n }));\n }\n }\n };\n });\n\n function use<S>(dep: Store<S>) {\n const value = dep.get();\n let cancel: Cancel | undefined;\n\n const on = () => {\n cancel ||= dep.subscribe(() => store.invalidate(), { runNow: false });\n };\n\n const off = () => {\n cancel?.();\n cancel = undefined;\n };\n\n deps.push({ store: dep, value, on, off });\n\n if (active) {\n on();\n }\n\n return value;\n }\n\n async function connect(createConnection: Connection<T>) {\n if (!active) {\n connection = { active: false };\n return;\n }\n\n const actions: AsyncConnectionActions<any> = {\n set(_value) {\n connection?.active &&\n q(() => {\n value = _value;\n notify();\n });\n },\n updateValue(update) {\n connection?.active &&\n q(async () => {\n if (update instanceof Function) {\n update = update(await value);\n }\n\n if (isPromise(update)) {\n update = await update;\n }\n\n if (!connection?.active) {\n return;\n }\n\n value = PromiseWithState.resolve(update) as T;\n notify();\n });\n },\n updateError(error) {\n connection?.active &&\n q(() => {\n value = PromiseWithState.reject(error) as T;\n notify();\n });\n },\n updateIsConnected(isConnected) {\n if (!connection?.active) {\n return;\n }\n\n if (isConnected) {\n whenConnected.resolve();\n }\n\n q(() => {\n if ('state' in store) {\n (store as unknown as Cache<any>).state.set('isConnected', isConnected);\n }\n });\n },\n close() {\n connection?.active && store.invalidate();\n },\n };\n\n connection = { active: true };\n let _cancel: Cancel | undefined = createConnection(actions as any);\n\n connection.cancel = () => {\n _cancel?.();\n _cancel = undefined;\n };\n\n if (!connection.active) {\n connection.cancel();\n }\n\n return whenConnected;\n }\n\n value =\n store.getter instanceof Function\n ? store.getter({ signal: ac.signal, use, connect })\n : store.getter;\n\n if (isPromise(value)) {\n value.finally(() => whenExecuted.resolve()).catch(() => undefined);\n } else {\n whenExecuted.resolve();\n }\n\n function check() {\n if (active) {\n return;\n }\n\n for (const dep of deps) {\n if (!deepEqual(dep.store.get(), dep.value)) {\n store.invalidate();\n return;\n }\n }\n }\n\n function stop() {\n cancelEffect();\n whenExecuted.resolve();\n whenConnected.resolve();\n ac.abort();\n\n if (connection) {\n connection.active = false;\n connection.cancel?.();\n q.clear();\n }\n }\n\n function invalidateDependencies(recursive?: boolean) {\n for (const dep of deps) {\n dep.store.invalidate(recursive);\n }\n }\n\n return {\n get value() {\n return value!;\n },\n check,\n stop,\n invalidateDependencies,\n };\n}\n\nexport function staticValue<T>(value: T): CalculatedValue<T> {\n return {\n value,\n check: () => undefined,\n stop: () => undefined,\n invalidateDependencies: () => undefined,\n };\n}\n","import type { Path } from './path';\nimport { get } from './propAccess';\n\nexport function makeSelector<T, S>(selector?: ((value: T) => S) | Path<any>): (value: T) => S {\n if (!selector) {\n return (x) => x as any;\n }\n\n if (selector instanceof Function) {\n return selector;\n }\n\n return (x) => get(x, selector as any) as any;\n}\n","export class Callable<Args extends any[], T> extends Function {\n constructor(protected _call: (...args: Args) => T) {\n super('...args', 'return this._call(...args)');\n\n // eslint-disable-next-line no-constructor-return\n return this.bind(this);\n }\n}\n","import { calcDuration } from './calcDuration';\nimport type { Duration } from '@core';\n\nexport type DebounceOptions =\n | Duration\n | {\n wait: Duration;\n maxWait?: Duration;\n };\n\nexport function debounce<Args extends any[]>(\n action: (...args: Args) => void,\n options: Duration | DebounceOptions,\n): {\n (...args: Args): void;\n flush(): void;\n cancel(): void;\n isScheduled(): boolean;\n} {\n const wait =\n typeof options === 'object' && 'wait' in options\n ? calcDuration(options.wait)\n : calcDuration(options);\n\n const maxWait =\n typeof options === 'object' && 'maxWait' in options && options.maxWait !== undefined\n ? calcDuration(options.maxWait)\n : undefined;\n\n let run: (() => void) | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let timeoutStarted: number | undefined;\n\n function flush() {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run?.();\n }\n\n function cancel() {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run = undefined;\n timeout = undefined;\n timeoutStarted = undefined;\n }\n\n function isScheduled() {\n return timeout !== undefined;\n }\n\n function debounce(...args: Args) {\n const now = Date.now();\n timeoutStarted ??= now;\n\n const deadline = Math.min(\n //\n now + wait,\n timeoutStarted + (maxWait ?? Number.POSITIVE_INFINITY),\n );\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n run = () => {\n run = undefined;\n timeout = undefined;\n timeoutStarted = undefined;\n\n action(...args);\n };\n\n timeout = setTimeout(run, deadline - now);\n }\n\n return Object.assign(debounce, { flush, cancel, isScheduled });\n}\n","import type { Cancel } from '@core';\nimport type { DisposableCancel } from '@core/commonTypes';\n\nexport default function disposable(dispose: Cancel): DisposableCancel {\n return Object.assign(\n dispose,\n Symbol.dispose ? { [Symbol.dispose]: dispose } : {},\n ) as DisposableCancel;\n}\n","export function forwardError(error: unknown): void {\n setTimeout(() => {\n throw error;\n });\n}\n","import { autobind } from '@lib/autobind';\n\nexport class PromiseCancelError extends Error {\n constructor() {\n super('cancelled');\n }\n}\n\nexport class PromiseWithCancel<T> extends Promise<T> {\n private abortController;\n\n constructor(\n executor: (\n resolve: (value: T) => void,\n reject: (error: unknown) => void,\n signal: AbortSignal,\n ) => void,\n ) {\n autobind(PromiseWithCancel);\n const abortController = new AbortController();\n\n super((resolve, reject) => {\n executor(resolve, reject, abortController.signal);\n\n abortController.signal.addEventListener('abort', (e) => {\n reject(abortController.signal.reason);\n });\n });\n\n this.abortController = abortController;\n }\n\n cancel(reason: any = new PromiseCancelError()): void {\n this.abortController.abort(reason);\n }\n}\n","import type { Store } from '../core/store';\nimport type { OptionalPropertyOf } from './typeHelpers';\n\ntype Function_ = (...args: any) => any;\n\nfunction createArrayAction<P extends keyof Array<any>>(prop: P) {\n return function arrayAction<T extends Array<any>>(\n this: Store<T>,\n ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n ): T[P] extends Function_ ? ReturnType<T[P]> : never {\n const newArray = this.get().slice() as T;\n const result = (newArray[prop] as Function_)(...(args as any));\n this.set(newArray);\n return result;\n };\n}\nexport const arrayMethods: {\n [P in 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | 'reverse' | 'sort']: <\n T extends Array<any>,\n >(\n this: Store<T>,\n ...args: T[P] extends Function_ ? Parameters<T[P]> : never\n ) => T[P] extends Function_ ? ReturnType<T[P]> : never;\n} = {\n splice: /* @__PURE__ */ createArrayAction('splice'),\n push: /* @__PURE__ */ createArrayAction('push'),\n pop: /* @__PURE__ */ createArrayAction('pop'),\n shift: /* @__PURE__ */ createArrayAction('shift'),\n unshift: /* @__PURE__ */ createArrayAction('unshift'),\n reverse: /* @__PURE__ */ createArrayAction('reverse'),\n sort: /* @__PURE__ */ createArrayAction('sort'),\n};\n\nexport const recordMethods = {\n delete<T extends Record<any, any>, K extends OptionalPropertyOf<T>>(\n this: Store<T>,\n key: K,\n ): void {\n const copy = { ...this.get() };\n delete copy[key];\n this.set(copy);\n },\n\n clear<T extends Record<any, any>>(this: Store<Partial<T>>): void {\n this.set({} as T);\n },\n};\n\nexport const mapMethods = {\n delete<K, V>(this: Store<Map<K, V>>, key: K): boolean {\n const newMap = new Map(this.get());\n const result = newMap.delete(key);\n this.set(newMap);\n return result;\n },\n\n clear<K, V>(this: Store<Map<K, V>>): void {\n this.set(new Map());\n },\n};\n\nexport const setMethods = {\n add<T>(this: Store<Set<T>>, value: T): void {\n const newSet = new Set(this.get());\n newSet.add(value);\n this.set(newSet);\n },\n\n delete<T>(this: Store<Set<T>>, value: T): void {\n const newSet = new Set(this.get());\n newSet.delete(value);\n this.set(newSet);\n },\n\n clear<T>(this: Store<Set<T>>): void {\n this.set(new Set());\n },\n};\n","import { calcDuration } from './calcDuration';\nimport type { Duration } from '@core';\n\nexport function throttle<Args extends any[]>(\n action: (...args: Args) => void,\n duration: Duration,\n): (...args: Args) => void {\n const ms = calcDuration(duration);\n\n let t = 0;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n return (...args: Args) => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n const dt = t + ms - Date.now();\n if (dt <= 0) {\n action(...args);\n t = Date.now();\n return;\n }\n\n timeout = setTimeout(() => {\n action(...args);\n t = Date.now();\n }, dt);\n };\n}\n","import { autobind } from '@lib/autobind';\nimport { calcDuration } from '@lib/calcDuration';\nimport { calculatedValue, staticValue, type CalculatedValue } from '@lib/calculatedValue';\nimport { Callable } from '@lib/callable';\nimport { debounce } from '@lib/debounce';\nimport disposable from '@lib/disposable';\nimport { deepEqual } from '@lib/equals';\nimport { forwardError } from '@lib/forwardError';\nimport { isObject } from '@lib/helpers';\nimport { makeSelector } from '@lib/makeSelector';\nimport type { Path, SettablePath, Value } from '@lib/path';\nimport { PromiseWithCancel } from '@lib/promiseWithCancel';\nimport { get, set } from '@lib/propAccess';\nimport { arrayMethods, mapMethods, recordMethods, setMethods } from '@lib/standardMethods';\nimport { throttle } from '@lib/throttle';\nimport type {\n CalculationActions,\n Cancel,\n DisposableCancel,\n Duration,\n Effect,\n Listener,\n Selector,\n SubscribeOptions,\n Update,\n} from './commonTypes';\n\nexport type StoreMethods = Record<string, (...args: any[]) => any>;\n\nexport type BoundStoreMethods<T, Methods extends StoreMethods> = Methods &\n ThisType<Store<T> & Methods>;\n\nexport interface StoreOptions {\n retain?: Duration;\n equals?: SubscribeOptions['equals'];\n}\n\nexport interface StoreOptionsWithMethods<T, Methods extends StoreMethods> extends StoreOptions {\n methods?: Methods & ThisType<Store<T> & Methods & StandardMethods<T>>;\n}\n\nexport type Calculate<T> = (helpers: CalculationActions<T>) => T;\n\ntype StandardMethods<T> =\n T extends Map<any, any>\n ? typeof mapMethods\n : T extends Set<any>\n ? typeof setMethods\n : T extends Array<any>\n ? typeof arrayMethods\n : T extends Record<any, any>\n ? typeof recordMethods\n : Record<string, never>;\n\ntype StoreWithMethods<T, Methods extends StoreMethods> = Store<T> &\n Omit<BoundStoreMethods<T, Methods>, keyof Store<T>> &\n StandardMethods<T>;\n\nexport interface OnceOptions {\n signal?: AbortSignal;\n timeout?: Duration;\n}\n\nfunction noop() {\n return undefined;\n}\n\nexport class Store<T> extends Callable<any, any> {\n protected calculatedValue?: CalculatedValue<T>;\n protected defaultValue?: CalculatedValue<T>;\n\n protected listeners: Map<Listener, boolean> = new Map();\n\n protected effects: Map<\n Effect,\n { handle?: Cancel; retain?: number; timeout?: ReturnType<typeof setTimeout> }\n > = new Map();\n\n protected notifyId = {};\n\n constructor(\n public readonly getter: T | Calculate<T>,\n public readonly options: StoreOptions = {},\n public readonly derivedFrom?: {\n store: Store<any>;\n selectors: (Selector<any, any> | Path<any>)[];\n updater: (state: any) => void;\n },\n protected readonly _call: (...args: any[]) => any = () => undefined,\n ) {\n super(_call);\n autobind(Store);\n\n if (typeof getter !== 'function') {\n this.calculatedValue = this.defaultValue = staticValue(getter);\n }\n }\n\n get(): T {\n this.calculatedValue?.check();\n\n if (!this.calculatedValue) {\n this.calculatedValue = calculatedValue(this, this.notify);\n }\n\n return this.calculatedValue.value;\n }\n\n set(update: Update<T>): void;\n\n set<const P extends Path<T>>(path: P, update: Update<Value<T, P>>): void;\n\n set(...args: any[]): void {\n const path: any = args.length > 1 ? args[0] : [];\n let update: Update<any> = args.length > 1 ? args[1] : args[0];\n\n if (update instanceof Function) {\n const before = this.get();\n const valueBefore = get(before, path);\n const valueAfter = update(valueBefore);\n update = set(before, path, valueAfter);\n } else if (path.length > 0) {\n update = set(this.get(), path, update);\n }\n\n if (this.derivedFrom) {\n this.derivedFrom.updater(update);\n return;\n }\n\n this.calculatedValue?.stop();\n this.calculatedValue = staticValue(update);\n this.notify();\n }\n\n invalidate(recursive?: boolean): void {\n if (recursive) {\n this.calculatedValue?.invalidateDependencies(recursive);\n }\n\n this.calculatedValue?.stop();\n this.calculatedValue = this.defaultValue;\n this.notify();\n }\n\n subscribe(listener: Listener<T>, options?: SubscribeOptions): DisposableCancel {\n const {\n passive,\n runNow = true,\n throttle: throttleOption,\n debounce: debounceOption,\n equals = deepEqual,\n } = options ?? {};\n\n let isSetup = false;\n let previousValue: { value: T } | undefined;\n\n let innerListener = () => {\n if (!isSetup) {\n return;\n }\n\n const value = passive ? this.calculatedValue : { value: this.get() };\n\n if (!value) {\n return;\n }\n\n if (previousValue && equals(value.value, previousValue.value)) {\n return;\n }\n\n const _previousValue = previousValue?.value;\n previousValue = this.calculatedValue && { value: this.calculatedValue?.value };\n\n try {\n listener(value.value, _previousValue);\n } catch (error) {\n forwardError(error);\n }\n };\n\n if (throttleOption) {\n innerListener = throttle(innerListener, throttleOption);\n } else if (debounceOption) {\n innerListener = debounce(innerListener, debounceOption);\n }\n\n this.listeners.set(innerListener, !passive);\n if (!passive) {\n this.onSubscribe();\n }\n\n isSetup = true;\n\n if (runNow) {\n innerListener();\n } else {\n previousValue = passive\n ? this.calculatedValue && { value: this.calculatedValue.value }\n : { value: this.get() };\n }\n\n return disposable(() => {\n this.listeners.delete(innerListener);\n if (!passive) {\n this.onUnsubscribe();\n }\n });\n }\n\n once<S extends T>(\n condition: (value: T) => value is S,\n options?: OnceOptions,\n ): PromiseWithCancel<S>;\n\n once(condition: (value: T) => boolean, options?: OnceOptions): PromiseWithCancel<T>;\n\n once(options?: OnceOptions): PromiseWithCancel<T>;\n\n once(\n ...args: [condition: (value: any) => boolean, options?: OnceOptions] | [options?: OnceOptions]\n ): PromiseWithCancel<any> {\n const condition = args[0] instanceof Function ? args[0] : Boolean;\n const options = args[0] instanceof Function ? args[1] : args[0];\n\n return new PromiseWithCancel<T>((resolve, reject, signal) => {\n let stopped = false;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const cancel = this.subscribe(\n (value) => {\n if (stopped || !condition(value)) {\n return;\n }\n\n resolve(value);\n stopped = true;\n timer && clearTimeout(timer);\n setTimeout(() => cancel());\n },\n {\n runNow: !!condition,\n },\n );\n\n if (stopped) {\n return;\n }\n\n signal.addEventListener('abort', cancel);\n\n options?.signal?.addEventListener('abort', () => {\n cancel();\n reject(options.signal?.reason ?? new Error('cancelled'));\n });\n\n if (options?.timeout !== undefined) {\n timer = setTimeout(() => {\n cancel();\n reject(new Error('timeout'));\n }, calcDuration(options.timeout));\n }\n });\n }\n\n map<S>(selector: Selector<T, S>, updater?: (value: S) => Update<T>): Store<S>;\n\n map<P extends SettablePath<T>>(selector: P): Store<Value<T, P>>;\n\n map(_selector: Selector<T, any> | SettablePath<any>, ...args: any[]): Store<any> {\n const updater: ((value: any) => Update<T>) | undefined =\n _selector instanceof Function\n ? args[0]\n : (value) => (state) => set(state, _selector as SettablePath<T>, value);\n\n const selector = makeSelector(_selector);\n\n const derivedFrom = {\n store: this.derivedFrom ? this.derivedFrom.store : this,\n selectors: this.derivedFrom ? [...this.derivedFrom.selectors, _selector] : [_selector],\n\n updater: (value: any) => {\n if (!updater) {\n throw new TypeError(\n 'Can only update computed stores that either are derived from other stores using string selectors or have an updater function.',\n );\n }\n\n let update = updater(value);\n\n if (update instanceof Function) {\n update = update(this.get());\n }\n\n if (this.derivedFrom) {\n this.derivedFrom.updater(update);\n } else {\n this.set(update);\n }\n },\n };\n\n return new Store(\n ({ use }) => {\n return selector(use(this));\n },\n this.options,\n derivedFrom,\n );\n }\n\n /** Add an effect that will be executed when the store becomes active, which means when it has at least one subscriber.\n * @param effect\n * If there is already a subscriber, the effect will be executed immediately.\n * Otherweise it will be executed as soon as the first subscription is created.\n * Every time all subscriptions are removed and the first is created again, the effect will be executed again.\n * @param retain\n * If provided, delay tearing down effects when the last subscriber is removed. This is useful if a short gap in subscriber coverage is supposed to be ignored. E.g. when switching pages, the old page might unsubscribe, while the new page subscribes immediately after.\n * @returns\n * The effect can return a teardown callback, which will be executed when the last subscription is removed and potentially the ratain time has passed.\n */\n addEffect(effect: Effect, retain: Duration | undefined = this.options.retain): Cancel {\n this.effects.set(effect, {\n handle: this.isActive() ? effect() ?? noop : undefined,\n retain: retain !== undefined ? calcDuration(retain) : undefined,\n });\n\n return () => {\n const { handle, timeout } = this.effects.get(effect) ?? {};\n handle?.();\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.delete(effect);\n };\n }\n\n /** Return whether the store is currently active, which means whether it has at least one subscriber. */\n isActive(): boolean {\n return [...this.listeners.values()].some(Boolean);\n }\n\n protected onSubscribe(): void {\n if ([...this.listeners.values()].filter(Boolean).length > 1) return;\n\n for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.set(effect, {\n handle: handle ?? effect() ?? noop,\n retain,\n timeout: undefined,\n });\n }\n }\n\n protected onUnsubscribe(): void {\n if ([...this.listeners.values()].some(Boolean)) return;\n\n for (const [effect, { handle, retain, timeout }] of this.effects.entries()) {\n if (!retain) {\n handle?.();\n\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n\n this.effects.set(effect, {\n handle: undefined,\n retain,\n timeout: undefined,\n });\n\n continue;\n }\n\n const newTimeout =\n timeout ??\n (handle\n ? setTimeout(() => {\n handle();\n this.effects.set(effect, {\n handle: undefined,\n retain,\n timeout: undefined,\n });\n }, retain)\n : undefined);\n\n this.effects.set(effect, {\n handle,\n retain,\n timeout: newTimeout,\n });\n }\n }\n\n protected notify(): void {\n const n = {};\n this.notifyId = n;\n\n const snapshot = [...this.listeners.keys()];\n for (const listener of snapshot) {\n listener();\n if (n !== this.notifyId) break;\n }\n }\n}\n\nfunction create<T>(calculate: Calculate<T>, options?: StoreOptions): Store<T>;\nfunction create<T, Methods extends StoreMethods = {}>(\n initialState: T,\n options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods>;\nfunction create<T, Methods extends StoreMethods>(\n initialState: T | Calculate<T>,\n options?: StoreOptionsWithMethods<T, Methods>,\n): StoreWithMethods<T, Methods> | Store<T> {\n options = { ...createStore.defaultOptions, ...options };\n\n const store = new Store(initialState, options);\n\n if (initialState instanceof Function) {\n return store;\n }\n\n let methods: StoreMethods | undefined = options?.methods;\n\n if (initialState instanceof Map) {\n methods = { ...mapMethods, ...methods };\n } else if (initialState instanceof Set) {\n methods = { ...setMethods, ...methods };\n } else if (Array.isArray(initialState)) {\n methods = { ...arrayMethods, ...methods };\n } else if (isObject(initialState)) {\n methods = { ...recordMethods, ...methods };\n }\n\n const boundMethods = Object.fromEntries(\n Object.entries(methods ?? ({} as BoundStoreMethods<T, any>))\n .filter(([name]) => !(name in store))\n .map(([name, action]) => [name, (action as any).bind(store)]),\n ) as BoundStoreMethods<T, any>;\n\n return Object.assign(store, boundMethods);\n}\n\nexport const createStore: typeof create & { defaultOptions: StoreOptions } =\n /* @__PURE__ */ Object.assign(create, {\n defaultOptions: {\n equals: deepEqual,\n } as StoreOptions,\n });\n"],"names":["value","deepEqual","get","debounce","set","isObject"],"mappings":"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"}