@dxos/async 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8

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 (42) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/browser/index.mjs +111 -88
  3. package/dist/lib/browser/index.mjs.map +3 -3
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/node-esm/index.mjs +111 -88
  6. package/dist/lib/node-esm/index.mjs.map +3 -3
  7. package/dist/lib/node-esm/meta.json +1 -1
  8. package/dist/types/src/callback.d.ts.map +1 -1
  9. package/dist/types/src/chain.d.ts.map +1 -1
  10. package/dist/types/src/cleanup.d.ts +2 -2
  11. package/dist/types/src/cleanup.d.ts.map +1 -1
  12. package/dist/types/src/debounce.d.ts +15 -10
  13. package/dist/types/src/debounce.d.ts.map +1 -1
  14. package/dist/types/src/errors.d.ts.map +1 -1
  15. package/dist/types/src/event-emitter.d.ts.map +1 -1
  16. package/dist/types/src/events.d.ts.map +1 -1
  17. package/dist/types/src/mutex.d.ts.map +1 -1
  18. package/dist/types/src/observable-value.d.ts.map +1 -1
  19. package/dist/types/src/observable.d.ts.map +1 -1
  20. package/dist/types/src/persistent-lifecycle.d.ts +3 -2
  21. package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
  22. package/dist/types/src/stream-to-array.d.ts.map +1 -1
  23. package/dist/types/src/task-scheduling.d.ts +29 -1
  24. package/dist/types/src/task-scheduling.d.ts.map +1 -1
  25. package/dist/types/src/test-stream.d.ts.map +1 -1
  26. package/dist/types/src/testing.d.ts.map +1 -1
  27. package/dist/types/src/timeout.d.ts +1 -1
  28. package/dist/types/src/timeout.d.ts.map +1 -1
  29. package/dist/types/src/timer.d.ts.map +1 -1
  30. package/dist/types/src/track-leaks.d.ts.map +1 -1
  31. package/dist/types/src/trigger.d.ts.map +1 -1
  32. package/dist/types/src/update-scheduler.d.ts.map +1 -1
  33. package/dist/types/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +12 -11
  35. package/src/cleanup.ts +7 -4
  36. package/src/debounce.ts +19 -14
  37. package/src/event-emitter.test.ts +0 -1
  38. package/src/observable-value.ts +4 -2
  39. package/src/persistent-lifecycle.test.ts +36 -0
  40. package/src/persistent-lifecycle.ts +33 -6
  41. package/src/task-scheduling.ts +95 -1
  42. package/src/timeout.ts +6 -9
@@ -1 +1 @@
1
- {"inputs":{"src/callback.ts":{"bytes":1595,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1619,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6540,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":8209,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":8042,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"}],"format":"esm"},"src/event-emitter.ts":{"bytes":4155,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39464,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12647,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":14052,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/observable.ts":{"bytes":17824,"imports":[{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/observable-value.ts":{"bytes":6436,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":8414,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":15388,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/persistent-lifecycle.ts":{"bytes":12777,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/push-iterable.ts":{"bytes":5922,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/stream-to-array.ts":{"bytes":4935,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":5038,"imports":[{"path":"@dxos/node-std/stream","kind":"import-statement","external":true},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/testing.ts":{"bytes":8388,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/timer.ts":{"bytes":5879,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9706,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2335,"imports":[{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/chain.ts","kind":"import-statement","original":"./chain"},{"path":"src/cleanup.ts","kind":"import-statement","original":"./cleanup"},{"path":"src/debounce.ts","kind":"import-statement","original":"./debounce"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/event-emitter.ts","kind":"import-statement","original":"./event-emitter"},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"src/observable-value.ts","kind":"import-statement","original":"./observable-value"},{"path":"src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"src/push-iterable.ts","kind":"import-statement","original":"./push-iterable"},{"path":"src/stream-to-array.ts","kind":"import-statement","original":"./stream-to-array"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/test-stream.ts","kind":"import-statement","original":"./test-stream"},{"path":"src/testing.ts","kind":"import-statement","original":"./testing"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/timer.ts","kind":"import-statement","original":"./timer"},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"},{"path":"src/update-scheduler.ts","kind":"import-statement","original":"./update-scheduler"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":100197},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/stream","kind":"import-statement","external":true}],"exports":["CancellableObservableProvider","DeferredTask","Event","MulticastObservable","Mutex","MutexGuard","Observable","ObservableProvider","PersistentLifecycle","PushStream","SubscriptionList","SubscriptionSet","TestStream","TimeoutError","Timer","Trigger","TriggerState","UpdateScheduler","addEventListener","addListener","asyncReturn","asyncTimeout","chain","combine","debounce","debounceAndThrottle","delay","dumpLeaks","interval","latch","makePushIterable","observableError","onEvent","promiseFromCallback","runInContext","runInContextAsync","scheduleExponentialBackoffTaskInterval","scheduleMicroTask","scheduleTask","scheduleTaskInterval","sleep","sleepWithContext","streamToArray","synchronized","throttle","timeout","toError","trackLeaks","trackResource","trigger","unrefTimeout","until","untilError","untilPromise","waitForCondition","waitForEvent"],"entryPoint":"src/index.ts","inputs":{"src/callback.ts":{"bytesInOutput":185},"src/index.ts":{"bytesInOutput":0},"src/chain.ts":{"bytesInOutput":216},"src/cleanup.ts":{"bytesInOutput":1045},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1486},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8703},"src/mutex.ts":{"bytesInOutput":2413},"src/observable.ts":{"bytesInOutput":3691},"src/trigger.ts":{"bytesInOutput":3014},"src/observable-value.ts":{"bytesInOutput":951},"src/persistent-lifecycle.ts":{"bytesInOutput":3536},"src/task-scheduling.ts":{"bytesInOutput":3151},"src/track-leaks.ts":{"bytesInOutput":2136},"src/push-iterable.ts":{"bytesInOutput":1389},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":915},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1065},"src/update-scheduler.ts":{"bytesInOutput":1952}},"bytes":41935}}}
1
+ {"inputs":{"src/callback.ts":{"bytes":1516,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1547,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6733,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":9093,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2838,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":7524,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"}],"format":"esm"},"src/event-emitter.ts":{"bytes":4075,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39225,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12575,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":13827,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/observable.ts":{"bytes":17747,"imports":[{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/observable-value.ts":{"bytes":6361,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":7844,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":23346,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/persistent-lifecycle.ts":{"bytes":15479,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/push-iterable.ts":{"bytes":5570,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/stream-to-array.ts":{"bytes":4853,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":4960,"imports":[{"path":"@dxos/node-std/stream","kind":"import-statement","external":true},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/testing.ts":{"bytes":8314,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/timer.ts":{"bytes":5803,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9619,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2259,"imports":[{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/chain.ts","kind":"import-statement","original":"./chain"},{"path":"src/cleanup.ts","kind":"import-statement","original":"./cleanup"},{"path":"src/debounce.ts","kind":"import-statement","original":"./debounce"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/event-emitter.ts","kind":"import-statement","original":"./event-emitter"},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"src/observable-value.ts","kind":"import-statement","original":"./observable-value"},{"path":"src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"src/push-iterable.ts","kind":"import-statement","original":"./push-iterable"},{"path":"src/stream-to-array.ts","kind":"import-statement","original":"./stream-to-array"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/test-stream.ts","kind":"import-statement","original":"./test-stream"},{"path":"src/testing.ts","kind":"import-statement","original":"./testing"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/timer.ts","kind":"import-statement","original":"./timer"},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"},{"path":"src/update-scheduler.ts","kind":"import-statement","original":"./update-scheduler"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":105548},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/stream","kind":"import-statement","external":true}],"exports":["AsyncTask","CancellableObservableProvider","DeferredTask","Event","MulticastObservable","Mutex","MutexGuard","Observable","ObservableProvider","PersistentLifecycle","PushStream","SubscriptionList","SubscriptionSet","TestStream","TimeoutError","Timer","Trigger","TriggerState","UpdateScheduler","addEventListener","addListener","asyncReturn","asyncTimeout","chain","combine","debounce","debounceAndThrottle","delay","dumpLeaks","interval","latch","makePushIterable","observableError","onEvent","promiseFromCallback","runInContext","runInContextAsync","scheduleExponentialBackoffTaskInterval","scheduleMicroTask","scheduleTask","scheduleTaskInterval","sleep","sleepWithContext","streamToArray","synchronized","throttle","timeout","toError","trackLeaks","trackResource","trigger","unrefTimeout","until","untilError","untilPromise","waitForCondition","waitForEvent"],"entryPoint":"src/index.ts","inputs":{"src/callback.ts":{"bytesInOutput":185},"src/index.ts":{"bytesInOutput":0},"src/chain.ts":{"bytesInOutput":216},"src/cleanup.ts":{"bytesInOutput":1090},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1479},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8516},"src/mutex.ts":{"bytesInOutput":2429},"src/observable.ts":{"bytesInOutput":3691},"src/trigger.ts":{"bytesInOutput":2831},"src/observable-value.ts":{"bytesInOutput":951},"src/persistent-lifecycle.ts":{"bytesInOutput":3433},"src/task-scheduling.ts":{"bytesInOutput":4964},"src/track-leaks.ts":{"bytesInOutput":1691},"src/push-iterable.ts":{"bytesInOutput":1145},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":915},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1065},"src/update-scheduler.ts":{"bytesInOutput":1952}},"bytes":42653}}}
@@ -24,7 +24,7 @@ var chain = (chain2) => async (elements) => {
24
24
  import { ComplexMap } from "@dxos/util";
25
25
  var combine = (...cleanupFns) => {
26
26
  return () => {
27
- cleanupFns.flat().forEach((cleanupFn) => cleanupFn());
27
+ cleanupFns.flat().filter((f) => typeof f === "function").forEach((cleanupFn) => cleanupFn());
28
28
  };
29
29
  };
30
30
  var timeout = (cb, ms = 0) => {
@@ -41,8 +41,8 @@ var addEventListener = (target, type, listener, options) => {
41
41
  };
42
42
  var SubscriptionList = class {
43
43
  _cleanups = [];
44
- add(cb) {
45
- this._cleanups.push(cb);
44
+ add(...cb) {
45
+ this._cleanups.push(...cb);
46
46
  return this;
47
47
  }
48
48
  clear() {
@@ -168,6 +168,9 @@ var sleepWithContext = (ctx, ms) => {
168
168
  };
169
169
  var asyncReturn = () => sleep(0);
170
170
  var asyncTimeout = async (promise, timeout2, err) => {
171
+ if (typeof promise === "function") {
172
+ throw new Error("First argument must be a promise.");
173
+ }
171
174
  let timeoutId;
172
175
  const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
173
176
  const timeoutPromise = new Promise((resolve, reject) => {
@@ -176,9 +179,8 @@ var asyncTimeout = async (promise, timeout2, err) => {
176
179
  }, timeout2);
177
180
  unrefTimeout(timeoutId);
178
181
  });
179
- const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
180
182
  return await Promise.race([
181
- conditionTimeout,
183
+ promise,
182
184
  timeoutPromise
183
185
  ]).finally(() => {
184
186
  clearTimeout(timeoutId);
@@ -215,7 +217,6 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
215
217
 
216
218
  // src/events.ts
217
219
  import { Context } from "@dxos/context";
218
- var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
219
220
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
220
221
  var Event = class _Event {
221
222
  /**
@@ -270,10 +271,7 @@ var Event = class _Event {
270
271
  _ctx,
271
272
  _callback
272
273
  ] : [
273
- new Context(void 0, {
274
- F: __dxlog_file,
275
- L: 132
276
- }),
274
+ new Context(),
277
275
  _ctx
278
276
  ];
279
277
  const weak = !!options?.weak;
@@ -303,10 +301,7 @@ var Event = class _Event {
303
301
  _ctx,
304
302
  _callback
305
303
  ] : [
306
- new Context(void 0, {
307
- F: __dxlog_file,
308
- L: 169
309
- }),
304
+ new Context(),
310
305
  _ctx
311
306
  ];
312
307
  const listener = new EventListener(this, callback, ctx, true, false);
@@ -609,7 +604,7 @@ var MutexGuard = class {
609
604
  this.release();
610
605
  }
611
606
  };
612
- var classMutexSymbol = Symbol("class-mutex");
607
+ var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
613
608
  var FORCE_DISABLE_WARNING = false;
614
609
  var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
615
610
  var synchronized = (target, propertyName, descriptor) => {
@@ -640,7 +635,6 @@ import PushStream from "zen-push";
640
635
 
641
636
  // src/trigger.ts
642
637
  import { invariant } from "@dxos/invariant";
643
- var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
644
638
  var trigger = (timeout2) => {
645
639
  let callback;
646
640
  const promise = new Promise((resolve, reject) => {
@@ -732,15 +726,7 @@ var Trigger = class {
732
726
  }
733
727
  };
734
728
  var latch = ({ count = 1, timeout: timeout2 } = {}) => {
735
- invariant(count >= 0, void 0, {
736
- F: __dxlog_file2,
737
- L: 139,
738
- S: void 0,
739
- A: [
740
- "count >= 0",
741
- ""
742
- ]
743
- });
729
+ invariant(count >= 0);
744
730
  let t;
745
731
  let doResolve;
746
732
  let doReject;
@@ -937,16 +923,15 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
937
923
  import { log as log2 } from "@dxos/log";
938
924
 
939
925
  // src/task-scheduling.ts
940
- import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
926
+ import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
941
927
  import { StackTrace as StackTrace2 } from "@dxos/debug";
942
928
 
943
929
  // src/track-leaks.ts
944
930
  import { StackTrace } from "@dxos/debug";
945
931
  import { log } from "@dxos/log";
946
- var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
947
932
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
948
933
  var openResources = /* @__PURE__ */ new Set();
949
- var handleSymbol = Symbol("checkLeaksHandle");
934
+ var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
950
935
  var trackResource = (resourceProvider) => {
951
936
  if (!enabled) {
952
937
  return () => {
@@ -993,31 +978,11 @@ var dumpLeaks = () => {
993
978
  if (!enabled) {
994
979
  return;
995
980
  }
996
- log.info(`Leaked resources ${openResources.size}:`, void 0, {
997
- F: __dxlog_file3,
998
- L: 82,
999
- S: void 0,
1000
- C: (f, a) => f(...a)
1001
- });
981
+ log.info(`Leaked resources ${openResources.size}:`);
1002
982
  for (const resource of openResources) {
1003
- log.info(`- ${resource.name} at`, void 0, {
1004
- F: __dxlog_file3,
1005
- L: 84,
1006
- S: void 0,
1007
- C: (f, a) => f(...a)
1008
- });
1009
- log.info(resource.openStack.getStack(1), void 0, {
1010
- F: __dxlog_file3,
1011
- L: 85,
1012
- S: void 0,
1013
- C: (f, a) => f(...a)
1014
- });
1015
- log.info("\n", void 0, {
1016
- F: __dxlog_file3,
1017
- L: 86,
1018
- S: void 0,
1019
- C: (f, a) => f(...a)
1020
- });
983
+ log.info(`- ${resource.name} at`);
984
+ log.info(resource.openStack.getStack(1));
985
+ log.info("\n");
1021
986
  }
1022
987
  };
1023
988
  if (enabled) {
@@ -1074,6 +1039,79 @@ var DeferredTask = class {
1074
1039
  await this._currentTask;
1075
1040
  }
1076
1041
  };
1042
+ var AsyncTask = class {
1043
+ #callback;
1044
+ #ctx = void 0;
1045
+ #scheduled = false;
1046
+ #currentTask = null;
1047
+ #nextTask = new Trigger();
1048
+ constructor(callback) {
1049
+ this.#callback = callback;
1050
+ }
1051
+ get scheduled() {
1052
+ return this.#scheduled;
1053
+ }
1054
+ /**
1055
+ * Context of the resource that owns the task.
1056
+ * When the context is disposed, the task is cancelled and cannot be scheduled again.
1057
+ */
1058
+ open() {
1059
+ this.#ctx = new Context2();
1060
+ }
1061
+ /**
1062
+ * Closes the task and waits for it to finish if it is running.
1063
+ */
1064
+ async close() {
1065
+ await this.#ctx?.dispose();
1066
+ await this.join();
1067
+ this.#ctx = void 0;
1068
+ }
1069
+ [Symbol.asyncDispose]() {
1070
+ return this.close();
1071
+ }
1072
+ /**
1073
+ * Schedule the task to run asynchronously.
1074
+ */
1075
+ // TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
1076
+ schedule() {
1077
+ if (!this.#ctx || this.#ctx.disposed) {
1078
+ throw new Error("AsyncTask not open");
1079
+ }
1080
+ if (this.#scheduled) {
1081
+ return;
1082
+ }
1083
+ scheduleTask(this.#ctx, async () => {
1084
+ await this.#currentTask;
1085
+ if (!this.#ctx || this.#ctx.disposed) {
1086
+ return;
1087
+ }
1088
+ this.#scheduled = false;
1089
+ const completionTrigger = this.#nextTask;
1090
+ this.#nextTask = new Trigger();
1091
+ this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
1092
+ completionTrigger.wake();
1093
+ });
1094
+ });
1095
+ this.#scheduled = true;
1096
+ }
1097
+ /**
1098
+ * Schedule the task to run and wait for it to finish.
1099
+ */
1100
+ async runBlocking() {
1101
+ if (this.#ctx?.disposed) {
1102
+ throw new ContextDisposedError2();
1103
+ }
1104
+ this.schedule();
1105
+ await this.#nextTask.wait();
1106
+ }
1107
+ /**
1108
+ * Waits for the current task to finish if it is running.
1109
+ * Does not schedule a new task.
1110
+ */
1111
+ async join() {
1112
+ await this.#currentTask;
1113
+ }
1114
+ };
1077
1115
  var runInContext = (ctx, fn) => {
1078
1116
  try {
1079
1117
  fn();
@@ -1159,9 +1197,9 @@ function _ts_decorate(decorators, target, key, desc) {
1159
1197
  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;
1160
1198
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1161
1199
  }
1162
- var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1163
1200
  var INIT_RESTART_DELAY = 100;
1164
1201
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1202
+ var STABLE_CONNECTION_THRESHOLD = 5e3;
1165
1203
  var PersistentLifecycle = class extends Resource {
1166
1204
  _start;
1167
1205
  _stop;
@@ -1170,6 +1208,7 @@ var PersistentLifecycle = class extends Resource {
1170
1208
  _currentState = void 0;
1171
1209
  _restartTask = void 0;
1172
1210
  _restartAfter = 0;
1211
+ _connectedAt = void 0;
1173
1212
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1174
1213
  super();
1175
1214
  this._start = start;
@@ -1185,29 +1224,27 @@ var PersistentLifecycle = class extends Resource {
1185
1224
  try {
1186
1225
  await this._restart();
1187
1226
  } catch (err) {
1227
+ if (this._ctx?.disposed) {
1228
+ return;
1229
+ }
1188
1230
  log2.warn("Restart failed", {
1189
1231
  err
1190
- }, {
1191
- F: __dxlog_file4,
1192
- L: 72,
1193
- S: this,
1194
- C: (f, a) => f(...a)
1195
1232
  });
1196
1233
  this._restartTask?.schedule();
1197
1234
  }
1198
1235
  });
1199
- this._currentState = await this._start().catch((err) => {
1236
+ try {
1237
+ this._currentState = await this._start();
1238
+ this._connectedAt = Date.now();
1239
+ } catch (err) {
1240
+ if (this._ctx?.disposed) {
1241
+ return;
1242
+ }
1200
1243
  log2.warn("Start failed", {
1201
1244
  err
1202
- }, {
1203
- F: __dxlog_file4,
1204
- L: 78,
1205
- S: this,
1206
- C: (f, a) => f(...a)
1207
1245
  });
1208
1246
  this._restartTask?.schedule();
1209
- return void 0;
1210
- });
1247
+ }
1211
1248
  }
1212
1249
  async _close() {
1213
1250
  await this._restartTask?.join();
@@ -1217,12 +1254,11 @@ var PersistentLifecycle = class extends Resource {
1217
1254
  async _restart() {
1218
1255
  log2(`restarting in ${this._restartAfter}ms`, {
1219
1256
  state: this._lifecycleState
1220
- }, {
1221
- F: __dxlog_file4,
1222
- L: 91,
1223
- S: this,
1224
- C: (f, a) => f(...a)
1225
1257
  });
1258
+ if (this._connectedAt !== void 0 && Date.now() - this._connectedAt >= STABLE_CONNECTION_THRESHOLD) {
1259
+ this._restartAfter = 0;
1260
+ }
1261
+ this._connectedAt = void 0;
1226
1262
  await this._stopCurrentState();
1227
1263
  if (this._lifecycleState !== LifecycleState.OPEN) {
1228
1264
  return;
@@ -1232,7 +1268,7 @@ var PersistentLifecycle = class extends Resource {
1232
1268
  await warnAfterTimeout2(5e3, "Connection establishment takes too long", async () => {
1233
1269
  this._currentState = await this._start();
1234
1270
  });
1235
- this._restartAfter = 0;
1271
+ this._connectedAt = Date.now();
1236
1272
  await this._onRestart?.();
1237
1273
  }
1238
1274
  async _stopCurrentState() {
@@ -1240,12 +1276,7 @@ var PersistentLifecycle = class extends Resource {
1240
1276
  try {
1241
1277
  await this._stop(this._currentState);
1242
1278
  } catch (err) {
1243
- log2.catch(err, void 0, {
1244
- F: __dxlog_file4,
1245
- L: 113,
1246
- S: this,
1247
- C: (f, a) => f(...a)
1248
- });
1279
+ log2.catch(err);
1249
1280
  }
1250
1281
  this._currentState = void 0;
1251
1282
  }
@@ -1269,7 +1300,6 @@ _ts_decorate([
1269
1300
 
1270
1301
  // src/push-iterable.ts
1271
1302
  import { invariant as invariant2 } from "@dxos/invariant";
1272
- var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1273
1303
  var makePushIterable = () => {
1274
1304
  const buf = [];
1275
1305
  const trigger2 = new Trigger({
@@ -1283,15 +1313,7 @@ var makePushIterable = () => {
1283
1313
  await trigger2.wait();
1284
1314
  }
1285
1315
  const item = buf.shift();
1286
- invariant2(item, void 0, {
1287
- F: __dxlog_file5,
1288
- L: 42,
1289
- S: this,
1290
- A: [
1291
- "item",
1292
- ""
1293
- ]
1294
- });
1316
+ invariant2(item);
1295
1317
  switch (item.kind) {
1296
1318
  case "next":
1297
1319
  return {
@@ -1596,6 +1618,7 @@ var UpdateScheduler = class {
1596
1618
  }
1597
1619
  };
1598
1620
  export {
1621
+ AsyncTask,
1599
1622
  CancellableObservableProvider,
1600
1623
  DeferredTask,
1601
1624
  Event,