@dxos/echo-pipeline 0.3.7 → 0.3.8-main.0ab6c73

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.
@@ -1,6 +1,6 @@
1
1
  import { type Stream } from '@dxos/codec-protobuf';
2
2
  import { PublicKey } from '@dxos/keys';
3
- import { type DataService, type MutationReceipt, type SubscribeRequest, type EchoEvent, type WriteRequest, type FlushRequest } from '@dxos/protocols/proto/dxos/echo/service';
3
+ import { type DataService, type MutationReceipt, type SubscribeRequest, type EchoEvent, type WriteRequest, type FlushRequest, type SyncRepoRequest, type SyncRepoResponse } from '@dxos/protocols/proto/dxos/echo/service';
4
4
  import { type DataServiceHost } from './data-service-host';
5
5
  export declare class DataServiceSubscriptions {
6
6
  private readonly _spaces;
@@ -18,5 +18,7 @@ export declare class DataServiceImpl implements DataService {
18
18
  subscribe(request: SubscribeRequest): Stream<EchoEvent>;
19
19
  write(request: WriteRequest): Promise<MutationReceipt>;
20
20
  flush(request: FlushRequest): Promise<void>;
21
+ syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse>;
22
+ sendSyncMessage(request: SyncRepoRequest): Promise<void>;
21
23
  }
22
24
  //# sourceMappingURL=data-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-service.d.ts","sourceRoot":"","sources":["../../../../src/db-host/data-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8D;IAEtF,KAAK;IAIC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe;IAOxD,eAAe,CAAC,QAAQ,EAAE,SAAS;IAOzC,cAAc,CAAC,QAAQ,EAAE,SAAS;CAGnC;AAED;;GAEG;AAEH,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,wBAAwB;IAErE,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;IAOvD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAQtD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5C"}
1
+ {"version":3,"file":"data-service.d.ts","sourceRoot":"","sources":["../../../../src/db-host/data-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8D;IAEtF,KAAK;IAIC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe;IAOxD,eAAe,CAAC,QAAQ,EAAE,SAAS;IAOzC,cAAc,CAAC,QAAQ,EAAE,SAAS;CAGnC;AAED;;GAEG;AAEH,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,wBAAwB;IAErE,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;IAOvD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAQtD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAI5D,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAiD,MAAM,aAAa,CAAC;AAEnF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA2B,WAAW,EAAmB,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;OAEG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC;AAiBF;;;;GAIG;AACH,qBAEa,YAAa,YAAW,mBAAmB;IAmC1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlCpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAuB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,SAAS,CAAC,CAAU;IAG5B,OAAO,CAAC,MAAM,CAA0B;IAGxC,OAAO,CAAC,UAAU,CAA2B;IAEtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,WAAW,EAAG,WAAW,CAAC;IAEjC;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAa;IAE5D;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAa;IAE5D,SAAgB,UAAU,oBAA2B;gBAExB,OAAO,EAAE,kBAAkB;IAExD,IAAI,MAAM,YAET;IAED,IAAI,QAAQ,yBAEX;IAED,IAAI,aAAa,6DAEhB;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAKjC,iBAAiB,CAAC,UAAU,EAAE,UAAU;IAaxC,IAAI;IAuCJ,KAAK;YAiCG,gBAAgB;IA6D9B,OAAO,CAAC,eAAe;YAST,oBAAoB;YAMpB,UAAU;YAsBV,wBAAwB;YAqBxB,2BAA2B;YA4B3B,aAAa;IAiBrB,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAqB7B,sBAAsB;YAId,MAAM;CAYrB"}
1
+ {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/space/data-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAiD,MAAM,aAAa,CAAC;AAEnF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA2B,WAAW,EAAmB,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;OAEG;IACH,iBAAiB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC;AAiBF;;;;GAIG;AACH,qBAEa,YAAa,YAAW,mBAAmB;IAmC1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAlCpC,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAuB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO,CAAC,+BAA+B,CAAmB;IAC1D,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,mBAAmB,CAAM;IACjC,OAAO,CAAC,SAAS,CAAC,CAAU;IAG5B,OAAO,CAAC,MAAM,CAA0B;IAGxC,OAAO,CAAC,UAAU,CAA2B;IAEtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,WAAW,EAAG,WAAW,CAAC;IAEjC;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAa;IAE5D;;OAEG;IACI,YAAY,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAa;IAE5D,SAAgB,UAAU,oBAA2B;gBAExB,OAAO,EAAE,kBAAkB;IAExD,IAAI,MAAM,YAET;IAED,IAAI,QAAQ,yBAEX;IAED,IAAI,aAAa,6DAEhB;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAKjC,iBAAiB,CAAC,UAAU,EAAE,UAAU;IAaxC,IAAI;IAuCJ,KAAK;YAiCG,gBAAgB;IA8D9B,OAAO,CAAC,eAAe;YAST,oBAAoB;YAMpB,UAAU;YAsBV,wBAAwB;YAqBxB,2BAA2B;YA4B3B,aAAa;IAiBrB,kBAAkB,CAAC,SAAS,EAAE,SAAS;IAMvC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAqB7B,sBAAsB;YAId,MAAM;CAYrB"}
package/package.json CHANGED
@@ -1,17 +1,33 @@
1
1
  {
2
2
  "name": "@dxos/echo-pipeline",
3
- "version": "0.3.7",
3
+ "version": "0.3.8-main.0ab6c73",
4
4
  "description": "ECHO database.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
7
  "license": "MIT",
8
8
  "author": "info@dxos.org",
9
- "main": "dist/lib/node/index.cjs",
10
- "browser": {
11
- "./dist/lib/node/index.cjs": "./dist/lib/browser/index.mjs",
12
- "./testing.js": "./dist/lib/browser/testing/index.mjs"
9
+ "exports": {
10
+ ".": {
11
+ "browser": "./dist/lib/browser/index.mjs",
12
+ "import": "./dist/lib/browser/index.mjs",
13
+ "require": "./dist/lib/node/index.cjs",
14
+ "node": "./dist/lib/node/index.cjs"
15
+ },
16
+ "./testing": {
17
+ "browser": "./dist/lib/browser/testing/index.mjs",
18
+ "import": "./dist/lib/browser/testing/index.mjs",
19
+ "require": "./dist/lib/node/testing/index.cjs",
20
+ "node": "./dist/lib/node/testing/index.cjs"
21
+ }
13
22
  },
14
23
  "types": "dist/types/src/index.d.ts",
24
+ "typesVersions": {
25
+ "*": {
26
+ "testing": [
27
+ "dist/types/src/testing/index.d.ts"
28
+ ]
29
+ }
30
+ },
15
31
  "files": [
16
32
  "testing.d.ts",
17
33
  "testing.js",
@@ -20,36 +36,36 @@
20
36
  ],
21
37
  "dependencies": {
22
38
  "crc-32": "^1.2.2",
23
- "@dxos/async": "0.3.7",
24
- "@dxos/codec-protobuf": "0.3.7",
25
- "@dxos/context": "0.3.7",
26
- "@dxos/credentials": "0.3.7",
27
- "@dxos/crypto": "0.3.7",
28
- "@dxos/debug": "0.3.7",
29
- "@dxos/document-model": "0.3.7",
30
- "@dxos/echo-db": "0.3.7",
31
- "@dxos/feed-store": "0.3.7",
32
- "@dxos/hypercore": "0.3.7",
33
- "@dxos/invariant": "0.3.7",
34
- "@dxos/keyring": "0.3.7",
35
- "@dxos/keys": "0.3.7",
36
- "@dxos/log": "0.3.7",
37
- "@dxos/messaging": "0.3.7",
38
- "@dxos/model-factory": "0.3.7",
39
- "@dxos/network-manager": "0.3.7",
40
- "@dxos/node-std": "0.3.7",
41
- "@dxos/protocols": "0.3.7",
42
- "@dxos/random-access-storage": "0.3.7",
43
- "@dxos/rpc": "0.3.7",
44
- "@dxos/teleport": "0.3.7",
45
- "@dxos/teleport-extension-gossip": "0.3.7",
46
- "@dxos/teleport-extension-object-sync": "0.3.7",
47
- "@dxos/teleport-extension-replicator": "0.3.7",
48
- "@dxos/text-model": "0.3.7",
49
- "@dxos/timeframe": "0.3.7",
50
- "@dxos/tracing": "0.3.7",
51
- "@dxos/typings": "0.3.7",
52
- "@dxos/util": "0.3.7"
39
+ "@dxos/async": "0.3.8-main.0ab6c73",
40
+ "@dxos/codec-protobuf": "0.3.8-main.0ab6c73",
41
+ "@dxos/context": "0.3.8-main.0ab6c73",
42
+ "@dxos/crypto": "0.3.8-main.0ab6c73",
43
+ "@dxos/credentials": "0.3.8-main.0ab6c73",
44
+ "@dxos/debug": "0.3.8-main.0ab6c73",
45
+ "@dxos/document-model": "0.3.8-main.0ab6c73",
46
+ "@dxos/echo-db": "0.3.8-main.0ab6c73",
47
+ "@dxos/feed-store": "0.3.8-main.0ab6c73",
48
+ "@dxos/hypercore": "0.3.8-main.0ab6c73",
49
+ "@dxos/invariant": "0.3.8-main.0ab6c73",
50
+ "@dxos/keyring": "0.3.8-main.0ab6c73",
51
+ "@dxos/keys": "0.3.8-main.0ab6c73",
52
+ "@dxos/log": "0.3.8-main.0ab6c73",
53
+ "@dxos/messaging": "0.3.8-main.0ab6c73",
54
+ "@dxos/network-manager": "0.3.8-main.0ab6c73",
55
+ "@dxos/model-factory": "0.3.8-main.0ab6c73",
56
+ "@dxos/protocols": "0.3.8-main.0ab6c73",
57
+ "@dxos/node-std": "0.3.8-main.0ab6c73",
58
+ "@dxos/random-access-storage": "0.3.8-main.0ab6c73",
59
+ "@dxos/rpc": "0.3.8-main.0ab6c73",
60
+ "@dxos/teleport": "0.3.8-main.0ab6c73",
61
+ "@dxos/teleport-extension-gossip": "0.3.8-main.0ab6c73",
62
+ "@dxos/teleport-extension-object-sync": "0.3.8-main.0ab6c73",
63
+ "@dxos/text-model": "0.3.8-main.0ab6c73",
64
+ "@dxos/timeframe": "0.3.8-main.0ab6c73",
65
+ "@dxos/teleport-extension-replicator": "0.3.8-main.0ab6c73",
66
+ "@dxos/tracing": "0.3.8-main.0ab6c73",
67
+ "@dxos/typings": "0.3.8-main.0ab6c73",
68
+ "@dxos/util": "0.3.8-main.0ab6c73"
53
69
  },
54
70
  "devDependencies": {
55
71
  "fast-check": "~3.3.0",
@@ -12,7 +12,13 @@ import { type PublicKey } from '@dxos/keys';
12
12
  import { log } from '@dxos/log';
13
13
  import { type DataMessage } from '@dxos/protocols/proto/dxos/echo/feed';
14
14
  import { type EchoObject, type EchoObjectBatch } from '@dxos/protocols/proto/dxos/echo/object';
15
- import { EchoEvent, type MutationReceipt, type WriteRequest } from '@dxos/protocols/proto/dxos/echo/service';
15
+ import {
16
+ EchoEvent,
17
+ type SyncRepoRequest,
18
+ type MutationReceipt,
19
+ type WriteRequest,
20
+ type SyncRepoResponse,
21
+ } from '@dxos/protocols/proto/dxos/echo/service';
16
22
  import { ComplexMap } from '@dxos/util';
17
23
 
18
24
  // After this limit the incremental object updates will be replaced with the full snapshot of the object.
@@ -198,6 +204,14 @@ export class DataServiceHost {
198
204
  async flush(): Promise<void> {
199
205
  await this._flush();
200
206
  }
207
+
208
+ syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse> {
209
+ throw new Error('Method not implemented.');
210
+ }
211
+
212
+ sendSyncMessage(request: SyncRepoRequest): Promise<void> {
213
+ throw new Error('Method not implemented.');
214
+ }
201
215
  }
202
216
 
203
217
  const createDataMessage = (batch: EchoObjectBatch) => ({
@@ -14,6 +14,8 @@ import {
14
14
  type EchoEvent,
15
15
  type WriteRequest,
16
16
  type FlushRequest,
17
+ type SyncRepoRequest,
18
+ type SyncRepoResponse,
17
19
  } from '@dxos/protocols/proto/dxos/echo/service';
18
20
  import { ComplexMap } from '@dxos/util';
19
21
 
@@ -74,4 +76,12 @@ export class DataServiceImpl implements DataService {
74
76
  this._subscriptions.getDataService(request.spaceKey) ?? raise(new Error(`space not found: ${request.spaceKey}`));
75
77
  return host.flush();
76
78
  }
79
+
80
+ syncRepo(request: SyncRepoRequest): Stream<SyncRepoResponse> {
81
+ throw new Error('Method not implemented.');
82
+ }
83
+
84
+ sendSyncMessage(request: SyncRepoRequest): Promise<void> {
85
+ throw new Error('Method not implemented.');
86
+ }
77
87
  }
@@ -217,6 +217,7 @@ export class DataPipeline implements CredentialProcessor {
217
217
  await waitForOneEpoch;
218
218
  }
219
219
 
220
+ // CPU bottleneck control.
220
221
  let messageCounter = 0;
221
222
 
222
223
  invariant(this._pipeline, 'Pipeline is not initialized.');
@@ -263,10 +264,10 @@ export class DataPipeline implements CredentialProcessor {
263
264
 
264
265
  span.end();
265
266
 
266
- if (++messageCounter > 1_000) {
267
+ if (++messageCounter > 100) {
267
268
  messageCounter = 0;
268
269
  // Allow other tasks to process.
269
- await sleep(1);
270
+ await idle(1_000);
270
271
  }
271
272
  }
272
273
  }
@@ -418,3 +419,39 @@ export class DataPipeline implements CredentialProcessor {
418
419
  await this._params.metadataStore.flush();
419
420
  }
420
421
  }
422
+
423
+ /**
424
+ * Waits up to `timeout` ms for the browser to be idle.
425
+ */
426
+ const idle = async (timeout?: number) => {
427
+ if (!('scheduler' in globalThis && typeof (globalThis as any).scheduler.postTask === 'function')) {
428
+ await sleep(1);
429
+ return;
430
+ }
431
+
432
+ await new Promise<void>((resolve) => {
433
+ // const beginTime = performance.now();
434
+ const cleanup = () => {
435
+ clearTimeout(timer);
436
+ controller.abort();
437
+ // log.warn('yielded for', { ms: performance.now() - beginTime });
438
+ };
439
+
440
+ const controller = new AbortController();
441
+
442
+ void (globalThis as any).scheduler
443
+ .postTask(
444
+ () => {
445
+ cleanup();
446
+ resolve();
447
+ },
448
+ { priority: 'background', signal: controller.signal },
449
+ )
450
+ .catch(() => {});
451
+
452
+ const timer = setTimeout(() => {
453
+ cleanup();
454
+ resolve();
455
+ }, timeout);
456
+ });
457
+ };