@dxos/async 0.8.3 → 0.8.4-main.3a94e84

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 (58) hide show
  1. package/dist/lib/browser/index.mjs +156 -155
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +156 -155
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/callback.d.ts +2 -1
  8. package/dist/types/src/callback.d.ts.map +1 -1
  9. package/dist/types/src/chain.d.ts +1 -1
  10. package/dist/types/src/chain.d.ts.map +1 -1
  11. package/dist/types/src/cleanup.d.ts +1 -1
  12. package/dist/types/src/cleanup.d.ts.map +1 -1
  13. package/dist/types/src/debounce.d.ts +19 -1
  14. package/dist/types/src/debounce.d.ts.map +1 -1
  15. package/dist/types/src/debounce.test.d.ts +2 -0
  16. package/dist/types/src/debounce.test.d.ts.map +1 -0
  17. package/dist/types/src/index.d.ts +0 -4
  18. package/dist/types/src/index.d.ts.map +1 -1
  19. package/dist/types/src/testing.d.ts +13 -0
  20. package/dist/types/src/testing.d.ts.map +1 -1
  21. package/dist/types/src/timeout.d.ts +1 -1
  22. package/dist/types/src/timeout.d.ts.map +1 -1
  23. package/dist/types/src/trigger.d.ts +11 -0
  24. package/dist/types/src/trigger.d.ts.map +1 -1
  25. package/dist/types/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +7 -7
  27. package/src/callback.ts +3 -3
  28. package/src/chain.ts +1 -1
  29. package/src/cleanup.ts +3 -3
  30. package/src/debounce.test.ts +115 -0
  31. package/src/debounce.ts +40 -4
  32. package/src/event-emitter.test.ts +1 -1
  33. package/src/events.test.ts +1 -1
  34. package/src/index.ts +0 -4
  35. package/src/observable-value.test.ts +1 -1
  36. package/src/testing.test.ts +41 -1
  37. package/src/testing.ts +53 -0
  38. package/src/timeout.ts +23 -22
  39. package/src/trigger.ts +58 -1
  40. package/src/update-scheduler.ts +1 -1
  41. package/dist/lib/node/index.cjs +0 -1638
  42. package/dist/lib/node/index.cjs.map +0 -7
  43. package/dist/lib/node/meta.json +0 -1
  44. package/dist/types/src/latch.d.ts +0 -11
  45. package/dist/types/src/latch.d.ts.map +0 -1
  46. package/dist/types/src/sink.d.ts +0 -6
  47. package/dist/types/src/sink.d.ts.map +0 -1
  48. package/dist/types/src/types.d.ts +0 -2
  49. package/dist/types/src/types.d.ts.map +0 -1
  50. package/dist/types/src/until.d.ts +0 -14
  51. package/dist/types/src/until.d.ts.map +0 -1
  52. package/dist/types/src/until.test.d.ts +0 -2
  53. package/dist/types/src/until.test.d.ts.map +0 -1
  54. package/src/latch.ts +0 -60
  55. package/src/sink.ts +0 -26
  56. package/src/types.ts +0 -5
  57. package/src/until.test.ts +0 -47
  58. package/src/until.ts +0 -58
@@ -1,5 +1,5 @@
1
- // packages/common/async/src/callback.ts
2
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
1
+ // src/callback.ts
2
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
3
3
  run((error, value) => {
4
4
  if (error) {
5
5
  reject(error);
@@ -9,16 +9,16 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
9
9
  });
10
10
  });
11
11
 
12
- // packages/common/async/src/chain.ts
13
- var asyncChain = (chain) => async (elements) => {
12
+ // src/chain.ts
13
+ var chain = (chain2) => async (elements) => {
14
14
  let result = await elements;
15
- for (const part of chain) {
15
+ for (const part of chain2) {
16
16
  result = await Promise.all(result.map(async (element) => await part(element)));
17
17
  }
18
18
  return result;
19
19
  };
20
20
 
21
- // packages/common/async/src/cleanup.ts
21
+ // src/cleanup.ts
22
22
  import { ComplexMap } from "@dxos/util";
23
23
  var combine = (...cleanupFns) => {
24
24
  return () => {
@@ -33,10 +33,10 @@ var interval = (cb, ms) => {
33
33
  const t = setInterval(cb, ms);
34
34
  return () => clearInterval(t);
35
35
  };
36
- function addEventListener(target, type, listener, options) {
36
+ var addEventListener = (target, type, listener, options) => {
37
37
  target.addEventListener(type, listener, options);
38
38
  return () => target.removeEventListener(type, listener, options);
39
- }
39
+ };
40
40
  var SubscriptionList = class {
41
41
  constructor() {
42
42
  this._cleanups = [];
@@ -64,16 +64,34 @@ var SubscriptionSet = class {
64
64
  }
65
65
  };
66
66
 
67
- // packages/common/async/src/debounce.ts
68
- var debounce = (cb, wait = 100) => {
67
+ // src/debounce.ts
68
+ var debounce = (cb, delay = 100) => {
69
69
  let t;
70
70
  return (...args) => {
71
71
  clearTimeout(t);
72
- t = setTimeout(() => cb(...args), wait);
72
+ t = setTimeout(() => cb(...args), delay);
73
+ };
74
+ };
75
+ var throttle = (cb, delay = 100) => {
76
+ let lastCall = 0;
77
+ return (...args) => {
78
+ const now = Date.now();
79
+ if (now - lastCall >= delay) {
80
+ cb(...args);
81
+ lastCall = now;
82
+ }
83
+ };
84
+ };
85
+ var debounceAndThrottle = (cb, delay = 100) => {
86
+ const debounced = debounce(cb, delay);
87
+ const throttled = throttle(cb, delay);
88
+ return (...args) => {
89
+ debounced(...args);
90
+ throttled(...args);
73
91
  };
74
92
  };
75
93
 
76
- // packages/common/async/src/errors.ts
94
+ // src/errors.ts
77
95
  var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
78
96
  var TimeoutError = class extends Error {
79
97
  constructor(timeout2, label) {
@@ -88,7 +106,7 @@ var observableError = (observable, err) => {
88
106
  }
89
107
  };
90
108
 
91
- // packages/common/async/src/timeout.ts
109
+ // src/timeout.ts
92
110
  import { ContextDisposedError } from "@dxos/context";
93
111
  var sleep = (ms) => {
94
112
  return new Promise((resolve) => {
@@ -104,6 +122,23 @@ var sleep = (ms) => {
104
122
  sleeper();
105
123
  });
106
124
  };
125
+ var sleepWithContext = (ctx, ms) => {
126
+ const error = new ContextDisposedError();
127
+ return new Promise((resolve, reject) => {
128
+ if (ctx.disposed) {
129
+ reject(error);
130
+ return;
131
+ }
132
+ const timeout2 = setTimeout(() => {
133
+ clearDispose();
134
+ resolve();
135
+ }, ms);
136
+ const clearDispose = ctx.onDispose(() => {
137
+ clearTimeout(timeout2);
138
+ reject(error);
139
+ });
140
+ });
141
+ };
107
142
  var asyncReturn = () => sleep(0);
108
143
  var asyncTimeout = async (promise, timeout2, err) => {
109
144
  let timeoutId;
@@ -114,7 +149,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
114
149
  }, timeout2);
115
150
  unrefTimeout(timeoutId);
116
151
  });
117
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
152
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
118
153
  return await Promise.race([
119
154
  conditionTimeout,
120
155
  timeoutPromise
@@ -127,25 +162,8 @@ var unrefTimeout = (timeoutId) => {
127
162
  timeoutId.unref();
128
163
  }
129
164
  };
130
- var sleepWithContext = (ctx, ms) => {
131
- const error = new ContextDisposedError();
132
- return new Promise((resolve, reject) => {
133
- if (ctx.disposed) {
134
- reject(error);
135
- return;
136
- }
137
- const timeout2 = setTimeout(() => {
138
- clearDispose();
139
- resolve();
140
- }, ms);
141
- const clearDispose = ctx.onDispose(() => {
142
- clearTimeout(timeout2);
143
- reject(error);
144
- });
145
- });
146
- };
147
165
 
148
- // packages/common/async/src/event-emitter.ts
166
+ // src/event-emitter.ts
149
167
  var onEvent = (eventEmitter, eventName, callback) => {
150
168
  eventEmitter.on(eventName, callback);
151
169
  return () => eventEmitter.off(eventName, callback);
@@ -168,9 +186,9 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
168
186
  return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
169
187
  };
170
188
 
171
- // packages/common/async/src/events.ts
189
+ // src/events.ts
172
190
  import { Context } from "@dxos/context";
173
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/async/src/events.ts";
191
+ var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
174
192
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
175
193
  var Event = class _Event {
176
194
  constructor() {
@@ -496,57 +514,7 @@ var weakListeners = () => {
496
514
  };
497
515
  };
498
516
 
499
- // packages/common/async/src/latch.ts
500
- import { invariant } from "@dxos/invariant";
501
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
502
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
503
- invariant(count >= 0, void 0, {
504
- F: __dxlog_file2,
505
- L: 19,
506
- S: void 0,
507
- A: [
508
- "count >= 0",
509
- ""
510
- ]
511
- });
512
- let t;
513
- let doResolve;
514
- let doReject;
515
- const promise = new Promise((resolve, reject) => {
516
- doResolve = (value) => {
517
- clearTimeout(t);
518
- resolve(value);
519
- };
520
- doReject = (err) => {
521
- clearTimeout(t);
522
- reject(err);
523
- };
524
- });
525
- if (count === 0) {
526
- setTimeout(() => {
527
- doResolve(0);
528
- });
529
- } else {
530
- if (timeout2) {
531
- t = setTimeout(() => {
532
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
533
- }, timeout2);
534
- }
535
- }
536
- let i = 0;
537
- return [
538
- async () => await promise,
539
- () => {
540
- if (++i === count) {
541
- doResolve(i);
542
- }
543
- return i;
544
- },
545
- (err) => doReject(err)
546
- ];
547
- };
548
-
549
- // packages/common/async/src/mutex.ts
517
+ // src/mutex.ts
550
518
  import "@dxos/util";
551
519
  import { warnAfterTimeout } from "@dxos/debug";
552
520
  var Mutex = class {
@@ -638,11 +606,13 @@ var synchronized = (target, propertyName, descriptor) => {
638
606
  });
639
607
  };
640
608
 
641
- // packages/common/async/src/observable.ts
609
+ // src/observable.ts
642
610
  import Observable from "zen-observable";
643
611
  import PushStream from "zen-push";
644
612
 
645
- // packages/common/async/src/trigger.ts
613
+ // src/trigger.ts
614
+ import { invariant } from "@dxos/invariant";
615
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
646
616
  var trigger = (timeout2) => {
647
617
  let callback;
648
618
  const promise = new Promise((resolve, reject) => {
@@ -729,8 +699,54 @@ var Trigger = class {
729
699
  return this;
730
700
  }
731
701
  };
702
+ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
703
+ invariant(count >= 0, void 0, {
704
+ F: __dxlog_file2,
705
+ L: 139,
706
+ S: void 0,
707
+ A: [
708
+ "count >= 0",
709
+ ""
710
+ ]
711
+ });
712
+ let t;
713
+ let doResolve;
714
+ let doReject;
715
+ const promise = new Promise((resolve, reject) => {
716
+ doResolve = (value) => {
717
+ clearTimeout(t);
718
+ resolve(value);
719
+ };
720
+ doReject = (err) => {
721
+ clearTimeout(t);
722
+ reject(err);
723
+ };
724
+ });
725
+ if (count === 0) {
726
+ setTimeout(() => {
727
+ doResolve(0);
728
+ });
729
+ } else {
730
+ if (timeout2) {
731
+ t = setTimeout(() => {
732
+ doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
733
+ }, timeout2);
734
+ }
735
+ }
736
+ let i = 0;
737
+ return [
738
+ async () => await promise,
739
+ () => {
740
+ if (++i === count) {
741
+ doResolve(i);
742
+ }
743
+ return i;
744
+ },
745
+ (err) => doReject(err)
746
+ ];
747
+ };
732
748
 
733
- // packages/common/async/src/observable.ts
749
+ // src/observable.ts
734
750
  var MulticastObservable = class _MulticastObservable extends Observable {
735
751
  constructor(subscriber, _value) {
736
752
  super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
@@ -832,7 +848,7 @@ var MulticastObservable = class _MulticastObservable extends Observable {
832
848
  };
833
849
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
834
850
 
835
- // packages/common/async/src/observable-value.ts
851
+ // src/observable-value.ts
836
852
  import { createSetDispatch } from "@dxos/util";
837
853
  var ObservableProvider = class {
838
854
  constructor() {
@@ -877,19 +893,19 @@ var CancellableObservableProvider = class extends ObservableProvider {
877
893
  }
878
894
  };
879
895
 
880
- // packages/common/async/src/persistent-lifecycle.ts
896
+ // src/persistent-lifecycle.ts
881
897
  import { LifecycleState, Resource, cancelWithContext } from "@dxos/context";
882
898
  import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
883
899
  import { log as log2 } from "@dxos/log";
884
900
 
885
- // packages/common/async/src/task-scheduling.ts
901
+ // src/task-scheduling.ts
886
902
  import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
887
903
  import { StackTrace as StackTrace2 } from "@dxos/debug";
888
904
 
889
- // packages/common/async/src/track-leaks.ts
905
+ // src/track-leaks.ts
890
906
  import { StackTrace } from "@dxos/debug";
891
907
  import { log } from "@dxos/log";
892
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/async/src/track-leaks.ts";
908
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
893
909
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
894
910
  var openResources = /* @__PURE__ */ new Set();
895
911
  var handleSymbol = Symbol("checkLeaksHandle");
@@ -970,7 +986,7 @@ if (enabled) {
970
986
  global.dxDumpLeaks = dumpLeaks;
971
987
  }
972
988
 
973
- // packages/common/async/src/task-scheduling.ts
989
+ // src/task-scheduling.ts
974
990
  var DeferredTask = class {
975
991
  constructor(_ctx, _callback) {
976
992
  this._ctx = _ctx;
@@ -1096,14 +1112,14 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
1096
1112
  });
1097
1113
  };
1098
1114
 
1099
- // packages/common/async/src/persistent-lifecycle.ts
1115
+ // src/persistent-lifecycle.ts
1100
1116
  function _ts_decorate(decorators, target, key, desc) {
1101
1117
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1102
1118
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1103
1119
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1104
1120
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1105
1121
  }
1106
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1122
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1107
1123
  var INIT_RESTART_DELAY = 100;
1108
1124
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1109
1125
  var PersistentLifecycle = class extends Resource {
@@ -1207,9 +1223,9 @@ _ts_decorate([
1207
1223
  synchronized
1208
1224
  ], PersistentLifecycle.prototype, "scheduleRestart", null);
1209
1225
 
1210
- // packages/common/async/src/push-iterable.ts
1226
+ // src/push-iterable.ts
1211
1227
  import { invariant as invariant2 } from "@dxos/invariant";
1212
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/async/src/push-iterable.ts";
1228
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1213
1229
  var makePushIterable = () => {
1214
1230
  const buf = [];
1215
1231
  const trigger2 = new Trigger({
@@ -1273,21 +1289,7 @@ var makePushIterable = () => {
1273
1289
  };
1274
1290
  };
1275
1291
 
1276
- // packages/common/async/src/sink.ts
1277
- var sink = (emitter, event, count = 1) => {
1278
- const [getPromise, resolve] = trigger();
1279
- let counter = 0;
1280
- const listener = () => {
1281
- if (++counter === count) {
1282
- emitter.off(event, listener);
1283
- resolve();
1284
- }
1285
- };
1286
- emitter.on(event, listener);
1287
- return getPromise();
1288
- };
1289
-
1290
- // packages/common/async/src/stream-to-array.ts
1292
+ // src/stream-to-array.ts
1291
1293
  var streamToArray = (stream) => {
1292
1294
  let deferred;
1293
1295
  if (!stream.readable) {
@@ -1329,7 +1331,7 @@ var streamToArray = (stream) => {
1329
1331
  return deferred;
1330
1332
  };
1331
1333
 
1332
- // packages/common/async/src/test-stream.ts
1334
+ // src/test-stream.ts
1333
1335
  import { Duplex } from "@dxos/node-std/stream";
1334
1336
  var TestStream = class extends Duplex {
1335
1337
  constructor() {
@@ -1365,7 +1367,7 @@ var TestStream = class extends Duplex {
1365
1367
  }
1366
1368
  };
1367
1369
 
1368
- // packages/common/async/src/testing.ts
1370
+ // src/testing.ts
1369
1371
  var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
1370
1372
  const stopTime = timeout2 ? Date.now() + timeout2 : 0;
1371
1373
  const trigger2 = new Trigger();
@@ -1390,8 +1392,41 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1390
1392
  timeout: timeout2
1391
1393
  });
1392
1394
  };
1395
+ var until = (cb, timeout2) => {
1396
+ return new Promise((resolve, reject) => {
1397
+ const t = timeout2 && setTimeout(() => {
1398
+ reject(new Error(`Timeout after ${t}ms`));
1399
+ }, timeout2);
1400
+ setTimeout(async () => {
1401
+ try {
1402
+ await cb((value) => {
1403
+ t && clearTimeout(t);
1404
+ resolve(value);
1405
+ }, (error) => {
1406
+ t && clearTimeout(t);
1407
+ reject(error);
1408
+ });
1409
+ } catch (err) {
1410
+ reject(err);
1411
+ }
1412
+ });
1413
+ });
1414
+ };
1415
+ var untilPromise = (cb) => cb();
1416
+ var untilError = (cb) => {
1417
+ return new Promise((resolve, reject) => {
1418
+ setTimeout(async () => {
1419
+ try {
1420
+ await cb();
1421
+ reject(new Error("No error was thrown."));
1422
+ } catch (err) {
1423
+ resolve(err);
1424
+ }
1425
+ });
1426
+ });
1427
+ };
1393
1428
 
1394
- // packages/common/async/src/timer.ts
1429
+ // src/timer.ts
1395
1430
  var Timer = class {
1396
1431
  constructor(_callback) {
1397
1432
  this._callback = _callback;
@@ -1439,42 +1474,7 @@ var Timer = class {
1439
1474
  }
1440
1475
  };
1441
1476
 
1442
- // packages/common/async/src/until.ts
1443
- var until = (cb, timeout2) => {
1444
- return new Promise((resolve, reject) => {
1445
- const t = timeout2 && setTimeout(() => {
1446
- reject(new Error(`Timeout after ${t}ms`));
1447
- }, timeout2);
1448
- setTimeout(async () => {
1449
- try {
1450
- await cb((value) => {
1451
- t && clearTimeout(t);
1452
- resolve(value);
1453
- }, (error) => {
1454
- t && clearTimeout(t);
1455
- reject(error);
1456
- });
1457
- } catch (err) {
1458
- reject(err);
1459
- }
1460
- });
1461
- });
1462
- };
1463
- var untilPromise = (cb) => cb();
1464
- var untilError = (cb) => {
1465
- return new Promise((resolve, reject) => {
1466
- setTimeout(async () => {
1467
- try {
1468
- await cb();
1469
- reject(new Error("No error was thrown."));
1470
- } catch (err) {
1471
- resolve(err);
1472
- }
1473
- });
1474
- });
1475
- };
1476
-
1477
- // packages/common/async/src/update-scheduler.ts
1477
+ // src/update-scheduler.ts
1478
1478
  var TIME_PERIOD = 1e3;
1479
1479
  var UpdateScheduler = class {
1480
1480
  constructor(_ctx, _callback, _params = {}) {
@@ -1566,29 +1566,30 @@ export {
1566
1566
  UpdateScheduler,
1567
1567
  addEventListener,
1568
1568
  addListener,
1569
- asyncChain,
1570
1569
  asyncReturn,
1571
1570
  asyncTimeout,
1571
+ chain,
1572
1572
  combine,
1573
- createPromiseFromCallback,
1574
1573
  debounce,
1574
+ debounceAndThrottle,
1575
1575
  dumpLeaks,
1576
1576
  interval,
1577
1577
  latch,
1578
1578
  makePushIterable,
1579
1579
  observableError,
1580
1580
  onEvent,
1581
+ promiseFromCallback,
1581
1582
  runInContext,
1582
1583
  runInContextAsync,
1583
1584
  scheduleExponentialBackoffTaskInterval,
1584
1585
  scheduleMicroTask,
1585
1586
  scheduleTask,
1586
1587
  scheduleTaskInterval,
1587
- sink,
1588
1588
  sleep,
1589
1589
  sleepWithContext,
1590
1590
  streamToArray,
1591
1591
  synchronized,
1592
+ throttle,
1592
1593
  timeout,
1593
1594
  toError,
1594
1595
  trackLeaks,