vitest 4.0.15 → 4.0.17

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 (49) hide show
  1. package/dist/browser.d.ts +3 -2
  2. package/dist/browser.js +2 -1
  3. package/dist/chunks/{base.CTp-EStD.js → base.XJJQZiKB.js} +4 -3
  4. package/dist/chunks/{browser.d.DBzUq_Na.d.ts → browser.d.ChKACdzH.d.ts} +3 -1
  5. package/dist/chunks/{cac.BNNpZQl7.js → cac.jRCLJDDc.js} +6 -6
  6. package/dist/chunks/{cli-api.C7sYjHmQ.js → cli-api.Cx2DW4Bc.js} +176 -89
  7. package/dist/chunks/{config.d.CzIjkicf.d.ts → config.d.Cy95HiCx.d.ts} +5 -0
  8. package/dist/chunks/{coverage.CtyeYmKM.js → coverage.AVPTjMgw.js} +6 -1
  9. package/dist/chunks/{index.bFLgAE-Z.js → index.6Qv1eEA6.js} +2 -2
  10. package/dist/chunks/{index.Drsj_6e7.js → index.C5r1PdPD.js} +1 -1
  11. package/dist/chunks/index.Chj8NDwU.js +206 -0
  12. package/dist/chunks/{index.BspFP3mn.js → index.CyBMJtT7.js} +1 -1
  13. package/dist/chunks/{index.456_DGfR.js → index.M8mOzt4Y.js} +26 -2
  14. package/dist/chunks/{init-forks.CKEYp90N.js → init-forks.BC6ZwHQN.js} +1 -1
  15. package/dist/chunks/{init-threads.D8Ok07M7.js → init-threads.CxSxLC0N.js} +1 -1
  16. package/dist/chunks/{init.B04saIIg.js → init.C9kljSTm.js} +5 -7
  17. package/dist/chunks/{modules.DJPjQW6m.js → modules.BJuCwlRJ.js} +4 -3
  18. package/dist/chunks/{plugin.d.CY7CUjf-.d.ts → plugin.d.CtqpEehP.d.ts} +1 -1
  19. package/dist/chunks/{reporters.d.OXEK7y4s.d.ts → reporters.d.CWXNI2jG.d.ts} +6 -5
  20. package/dist/chunks/{rpc.BytlcPfC.js → rpc.BoxB0q7B.js} +1 -1
  21. package/dist/chunks/{startModuleRunner.Iz2V0ESw.js → startModuleRunner.DEj0jb3e.js} +2 -2
  22. package/dist/chunks/{test.BT8LKgU9.js → test.B8ej_ZHS.js} +1 -1
  23. package/dist/chunks/{traces.U4xDYhzZ.js → traces.CCmnQaNT.js} +46 -1
  24. package/dist/chunks/{vm.BwmD1Rql.js → vm.CMjifoPa.js} +2 -2
  25. package/dist/chunks/worker.d.Dyxm8DEL.d.ts +255 -0
  26. package/dist/cli.js +2 -2
  27. package/dist/config.d.ts +6 -6
  28. package/dist/coverage.d.ts +5 -5
  29. package/dist/coverage.js +1 -1
  30. package/dist/environments.js +1 -1
  31. package/dist/index.d.ts +7 -7
  32. package/dist/module-evaluator.js +3 -11
  33. package/dist/module-runner.js +3 -3
  34. package/dist/node.d.ts +20 -11
  35. package/dist/node.js +11 -11
  36. package/dist/reporters.d.ts +4 -4
  37. package/dist/reporters.js +2 -2
  38. package/dist/runners.d.ts +1 -1
  39. package/dist/runners.js +3 -3
  40. package/dist/worker.d.ts +5 -3
  41. package/dist/worker.js +10 -10
  42. package/dist/workers/forks.js +11 -11
  43. package/dist/workers/runVmTests.js +4 -4
  44. package/dist/workers/threads.js +11 -11
  45. package/dist/workers/vmForks.js +9 -9
  46. package/dist/workers/vmThreads.js +9 -9
  47. package/package.json +13 -13
  48. package/dist/chunks/index.0kCJoeWi.js +0 -220
  49. package/dist/chunks/worker.d.B4A26qg6.d.ts +0 -238
package/dist/worker.d.ts CHANGED
@@ -1,15 +1,17 @@
1
- import { W as WorkerGlobalState, B as BirpcOptions, a as WorkerSetupContext } from './chunks/worker.d.B4A26qg6.js';
1
+ import { W as WorkerGlobalState, a as WorkerSetupContext, B as BirpcOptions } from './chunks/worker.d.Dyxm8DEL.js';
2
2
  import { T as Traces } from './chunks/traces.d.402V_yFI.js';
3
3
  import { Awaitable } from '@vitest/utils';
4
4
  import { R as RuntimeRPC } from './chunks/rpc.d.RH3apGEf.js';
5
5
  import '@vitest/runner';
6
6
  import 'vite/module-runner';
7
- import './chunks/config.d.CzIjkicf.js';
7
+ import './chunks/config.d.Cy95HiCx.js';
8
8
  import '@vitest/pretty-format';
9
9
  import '@vitest/snapshot';
10
10
  import '@vitest/utils/diff';
11
11
  import './chunks/environment.d.CrsxCzP1.js';
12
12
 
13
+ /** @experimental */
14
+ declare function setupEnvironment(context: WorkerSetupContext): Promise<() => Promise<void>>;
13
15
  /** @experimental */
14
16
  declare function runBaseTests(method: "run" | "collect", state: WorkerGlobalState, traces: Traces): Promise<void>;
15
17
 
@@ -26,4 +28,4 @@ interface Options extends VitestWorker {
26
28
  /** @experimental */
27
29
  declare function init(worker: Options): void;
28
30
 
29
- export { init, runBaseTests };
31
+ export { init, runBaseTests, setupEnvironment };
package/dist/worker.js CHANGED
@@ -1,17 +1,17 @@
1
- export { r as runBaseTests } from './chunks/base.CTp-EStD.js';
2
- export { i as init } from './chunks/init.B04saIIg.js';
1
+ export { r as runBaseTests, s as setupEnvironment } from './chunks/base.XJJQZiKB.js';
2
+ export { i as init } from './chunks/init.C9kljSTm.js';
3
3
  import 'node:vm';
4
4
  import '@vitest/spy';
5
- import './chunks/index.bFLgAE-Z.js';
5
+ import './chunks/index.6Qv1eEA6.js';
6
6
  import '@vitest/expect';
7
7
  import './chunks/setup-common.Cm-kSBVi.js';
8
8
  import './chunks/coverage.D_JHT54q.js';
9
9
  import '@vitest/snapshot';
10
10
  import '@vitest/utils/timers';
11
11
  import './chunks/utils.DvEY5TfP.js';
12
- import './chunks/rpc.BytlcPfC.js';
13
- import './chunks/index.0kCJoeWi.js';
14
- import './chunks/test.BT8LKgU9.js';
12
+ import './chunks/rpc.BoxB0q7B.js';
13
+ import './chunks/index.Chj8NDwU.js';
14
+ import './chunks/test.B8ej_ZHS.js';
15
15
  import '@vitest/runner';
16
16
  import '@vitest/utils/helpers';
17
17
  import './chunks/benchmark.B3N2zMcH.js';
@@ -25,16 +25,16 @@ import './chunks/_commonjsHelpers.D26ty3Ew.js';
25
25
  import './chunks/date.Bq6ZW5rf.js';
26
26
  import './chunks/evaluatedModules.Dg1zASAC.js';
27
27
  import 'vite/module-runner';
28
- import './chunks/startModuleRunner.Iz2V0ESw.js';
28
+ import './chunks/startModuleRunner.DEj0jb3e.js';
29
29
  import 'node:fs';
30
- import './chunks/modules.DJPjQW6m.js';
30
+ import './chunks/modules.BJuCwlRJ.js';
31
31
  import 'node:module';
32
32
  import 'node:url';
33
33
  import './path.js';
34
34
  import 'node:path';
35
35
  import '@vitest/utils/serialize';
36
36
  import './module-evaluator.js';
37
- import './chunks/traces.U4xDYhzZ.js';
37
+ import './chunks/traces.CCmnQaNT.js';
38
38
  import '@vitest/mocker';
39
39
  import 'node:perf_hooks';
40
40
  import './chunks/inspector.CvyFGlXm.js';
@@ -44,5 +44,5 @@ import 'node:util';
44
44
  import '@vitest/utils/constants';
45
45
  import './chunks/index.Z5E_ObnR.js';
46
46
  import 'expect-type';
47
- import './chunks/index.BspFP3mn.js';
47
+ import './chunks/index.CyBMJtT7.js';
48
48
  import 'node:console';
@@ -1,17 +1,17 @@
1
- import { r as runBaseTests, s as setupEnvironment } from '../chunks/base.CTp-EStD.js';
2
- import { w as workerInit } from '../chunks/init-forks.CKEYp90N.js';
1
+ import { r as runBaseTests, s as setupEnvironment } from '../chunks/base.XJJQZiKB.js';
2
+ import { w as workerInit } from '../chunks/init-forks.BC6ZwHQN.js';
3
3
  import 'node:vm';
4
4
  import '@vitest/spy';
5
- import '../chunks/index.bFLgAE-Z.js';
5
+ import '../chunks/index.6Qv1eEA6.js';
6
6
  import '@vitest/expect';
7
7
  import '../chunks/setup-common.Cm-kSBVi.js';
8
8
  import '../chunks/coverage.D_JHT54q.js';
9
9
  import '@vitest/snapshot';
10
10
  import '@vitest/utils/timers';
11
11
  import '../chunks/utils.DvEY5TfP.js';
12
- import '../chunks/rpc.BytlcPfC.js';
13
- import '../chunks/index.0kCJoeWi.js';
14
- import '../chunks/test.BT8LKgU9.js';
12
+ import '../chunks/rpc.BoxB0q7B.js';
13
+ import '../chunks/index.Chj8NDwU.js';
14
+ import '../chunks/test.B8ej_ZHS.js';
15
15
  import '@vitest/runner';
16
16
  import '@vitest/utils/helpers';
17
17
  import '../chunks/benchmark.B3N2zMcH.js';
@@ -23,20 +23,20 @@ import '@vitest/utils/offset';
23
23
  import '@vitest/utils/source-map';
24
24
  import '../chunks/_commonjsHelpers.D26ty3Ew.js';
25
25
  import '../chunks/date.Bq6ZW5rf.js';
26
- import '../chunks/init.B04saIIg.js';
26
+ import '../chunks/init.C9kljSTm.js';
27
27
  import 'node:fs';
28
28
  import 'node:module';
29
29
  import 'node:url';
30
30
  import 'vite/module-runner';
31
- import '../chunks/startModuleRunner.Iz2V0ESw.js';
32
- import '../chunks/modules.DJPjQW6m.js';
31
+ import '../chunks/startModuleRunner.DEj0jb3e.js';
32
+ import '../chunks/modules.BJuCwlRJ.js';
33
33
  import '../path.js';
34
34
  import 'node:path';
35
35
  import '@vitest/utils/serialize';
36
36
  import '../module-evaluator.js';
37
- import '../chunks/traces.U4xDYhzZ.js';
37
+ import '../chunks/traces.CCmnQaNT.js';
38
38
  import '@vitest/mocker';
39
- import '../chunks/index.BspFP3mn.js';
39
+ import '../chunks/index.CyBMJtT7.js';
40
40
  import 'node:console';
41
41
  import '../chunks/inspector.CvyFGlXm.js';
42
42
  import '../chunks/evaluatedModules.Dg1zASAC.js';
@@ -5,17 +5,17 @@ import timersPromises from 'node:timers/promises';
5
5
  import util from 'node:util';
6
6
  import { startTests, collectTests } from '@vitest/runner';
7
7
  import { KNOWN_ASSET_TYPES } from '@vitest/utils/constants';
8
- import { s as setupChaiConfig, r as resolveTestRunner, a as resolveSnapshotEnvironment } from '../chunks/index.bFLgAE-Z.js';
8
+ import { s as setupChaiConfig, r as resolveTestRunner, a as resolveSnapshotEnvironment } from '../chunks/index.6Qv1eEA6.js';
9
9
  import { c as setupCommonEnv, s as startCoverageInsideWorker, a as stopCoverageInsideWorker } from '../chunks/setup-common.Cm-kSBVi.js';
10
10
  import { i as index } from '../chunks/index.Z5E_ObnR.js';
11
11
  import { c as closeInspector } from '../chunks/inspector.CvyFGlXm.js';
12
12
  import { g as getWorkerState } from '../chunks/utils.DvEY5TfP.js';
13
13
  import { g as globalExpect } from '../chunks/vi.2VT5v0um.js';
14
14
  import '@vitest/expect';
15
- import '../chunks/rpc.BytlcPfC.js';
15
+ import '../chunks/rpc.BoxB0q7B.js';
16
16
  import '@vitest/utils/timers';
17
- import '../chunks/index.0kCJoeWi.js';
18
- import '../chunks/test.BT8LKgU9.js';
17
+ import '../chunks/index.Chj8NDwU.js';
18
+ import '../chunks/test.B8ej_ZHS.js';
19
19
  import '@vitest/utils/helpers';
20
20
  import '../chunks/benchmark.B3N2zMcH.js';
21
21
  import '@vitest/runner/utils';
@@ -1,17 +1,17 @@
1
- import { s as setupEnvironment, r as runBaseTests } from '../chunks/base.CTp-EStD.js';
2
- import { w as workerInit } from '../chunks/init-threads.D8Ok07M7.js';
1
+ import { s as setupEnvironment, r as runBaseTests } from '../chunks/base.XJJQZiKB.js';
2
+ import { w as workerInit } from '../chunks/init-threads.CxSxLC0N.js';
3
3
  import 'node:vm';
4
4
  import '@vitest/spy';
5
- import '../chunks/index.bFLgAE-Z.js';
5
+ import '../chunks/index.6Qv1eEA6.js';
6
6
  import '@vitest/expect';
7
7
  import '../chunks/setup-common.Cm-kSBVi.js';
8
8
  import '../chunks/coverage.D_JHT54q.js';
9
9
  import '@vitest/snapshot';
10
10
  import '@vitest/utils/timers';
11
11
  import '../chunks/utils.DvEY5TfP.js';
12
- import '../chunks/rpc.BytlcPfC.js';
13
- import '../chunks/index.0kCJoeWi.js';
14
- import '../chunks/test.BT8LKgU9.js';
12
+ import '../chunks/rpc.BoxB0q7B.js';
13
+ import '../chunks/index.Chj8NDwU.js';
14
+ import '../chunks/test.B8ej_ZHS.js';
15
15
  import '@vitest/runner';
16
16
  import '@vitest/utils/helpers';
17
17
  import '../chunks/benchmark.B3N2zMcH.js';
@@ -23,20 +23,20 @@ import '@vitest/utils/offset';
23
23
  import '@vitest/utils/source-map';
24
24
  import '../chunks/_commonjsHelpers.D26ty3Ew.js';
25
25
  import '../chunks/date.Bq6ZW5rf.js';
26
- import '../chunks/init.B04saIIg.js';
26
+ import '../chunks/init.C9kljSTm.js';
27
27
  import 'node:fs';
28
28
  import 'node:module';
29
29
  import 'node:url';
30
30
  import 'vite/module-runner';
31
- import '../chunks/startModuleRunner.Iz2V0ESw.js';
32
- import '../chunks/modules.DJPjQW6m.js';
31
+ import '../chunks/startModuleRunner.DEj0jb3e.js';
32
+ import '../chunks/modules.BJuCwlRJ.js';
33
33
  import '../path.js';
34
34
  import 'node:path';
35
35
  import '@vitest/utils/serialize';
36
36
  import '../module-evaluator.js';
37
- import '../chunks/traces.U4xDYhzZ.js';
37
+ import '../chunks/traces.CCmnQaNT.js';
38
38
  import '@vitest/mocker';
39
- import '../chunks/index.BspFP3mn.js';
39
+ import '../chunks/index.CyBMJtT7.js';
40
40
  import 'node:console';
41
41
  import '../chunks/inspector.CvyFGlXm.js';
42
42
  import '../chunks/evaluatedModules.Dg1zASAC.js';
@@ -1,27 +1,27 @@
1
- import { w as workerInit } from '../chunks/init-forks.CKEYp90N.js';
2
- import { r as runVmTests } from '../chunks/vm.BwmD1Rql.js';
3
- import '../chunks/init.B04saIIg.js';
1
+ import { w as workerInit } from '../chunks/init-forks.BC6ZwHQN.js';
2
+ import { r as runVmTests } from '../chunks/vm.CMjifoPa.js';
3
+ import '../chunks/init.C9kljSTm.js';
4
4
  import 'node:fs';
5
5
  import 'node:module';
6
6
  import 'node:url';
7
7
  import 'pathe';
8
8
  import 'vite/module-runner';
9
- import '../chunks/startModuleRunner.Iz2V0ESw.js';
9
+ import '../chunks/startModuleRunner.DEj0jb3e.js';
10
10
  import '@vitest/utils/helpers';
11
- import '../chunks/modules.DJPjQW6m.js';
11
+ import '../chunks/modules.BJuCwlRJ.js';
12
12
  import '../path.js';
13
13
  import 'node:path';
14
14
  import '@vitest/utils/serialize';
15
15
  import '../module-evaluator.js';
16
16
  import 'node:vm';
17
- import '../chunks/traces.U4xDYhzZ.js';
17
+ import '../chunks/traces.CCmnQaNT.js';
18
18
  import '@vitest/mocker';
19
- import '../chunks/index.BspFP3mn.js';
19
+ import '../chunks/index.CyBMJtT7.js';
20
20
  import 'node:console';
21
21
  import '@vitest/utils/error';
22
- import '../chunks/rpc.BytlcPfC.js';
22
+ import '../chunks/rpc.BoxB0q7B.js';
23
23
  import '@vitest/utils/timers';
24
- import '../chunks/index.0kCJoeWi.js';
24
+ import '../chunks/index.Chj8NDwU.js';
25
25
  import '../chunks/utils.DvEY5TfP.js';
26
26
  import '@vitest/utils/source-map';
27
27
  import '../chunks/inspector.CvyFGlXm.js';
@@ -1,28 +1,28 @@
1
- import { w as workerInit } from '../chunks/init-threads.D8Ok07M7.js';
2
- import { r as runVmTests } from '../chunks/vm.BwmD1Rql.js';
1
+ import { w as workerInit } from '../chunks/init-threads.CxSxLC0N.js';
2
+ import { r as runVmTests } from '../chunks/vm.CMjifoPa.js';
3
3
  import 'node:worker_threads';
4
- import '../chunks/init.B04saIIg.js';
4
+ import '../chunks/init.C9kljSTm.js';
5
5
  import 'node:fs';
6
6
  import 'node:module';
7
7
  import 'node:url';
8
8
  import 'pathe';
9
9
  import 'vite/module-runner';
10
- import '../chunks/startModuleRunner.Iz2V0ESw.js';
10
+ import '../chunks/startModuleRunner.DEj0jb3e.js';
11
11
  import '@vitest/utils/helpers';
12
- import '../chunks/modules.DJPjQW6m.js';
12
+ import '../chunks/modules.BJuCwlRJ.js';
13
13
  import '../path.js';
14
14
  import 'node:path';
15
15
  import '@vitest/utils/serialize';
16
16
  import '../module-evaluator.js';
17
17
  import 'node:vm';
18
- import '../chunks/traces.U4xDYhzZ.js';
18
+ import '../chunks/traces.CCmnQaNT.js';
19
19
  import '@vitest/mocker';
20
- import '../chunks/index.BspFP3mn.js';
20
+ import '../chunks/index.CyBMJtT7.js';
21
21
  import 'node:console';
22
22
  import '@vitest/utils/error';
23
- import '../chunks/rpc.BytlcPfC.js';
23
+ import '../chunks/rpc.BoxB0q7B.js';
24
24
  import '@vitest/utils/timers';
25
- import '../chunks/index.0kCJoeWi.js';
25
+ import '../chunks/index.Chj8NDwU.js';
26
26
  import '../chunks/utils.DvEY5TfP.js';
27
27
  import '@vitest/utils/source-map';
28
28
  import '../chunks/inspector.CvyFGlXm.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vitest",
3
3
  "type": "module",
4
- "version": "4.0.15",
4
+ "version": "4.0.17",
5
5
  "description": "Next generation testing framework powered by Vite",
6
6
  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
7
7
  "license": "MIT",
@@ -134,10 +134,10 @@
134
134
  "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
135
135
  "happy-dom": "*",
136
136
  "jsdom": "*",
137
- "@vitest/browser-playwright": "4.0.15",
138
- "@vitest/browser-preview": "4.0.15",
139
- "@vitest/ui": "4.0.15",
140
- "@vitest/browser-webdriverio": "4.0.15"
137
+ "@vitest/browser-playwright": "4.0.17",
138
+ "@vitest/browser-preview": "4.0.17",
139
+ "@vitest/browser-webdriverio": "4.0.17",
140
+ "@vitest/ui": "4.0.17"
141
141
  },
142
142
  "peerDependenciesMeta": {
143
143
  "@edge-runtime/vm": {
@@ -182,13 +182,13 @@
182
182
  "tinyrainbow": "^3.0.3",
183
183
  "vite": "^6.0.0 || ^7.0.0",
184
184
  "why-is-node-running": "^2.3.0",
185
- "@vitest/expect": "4.0.15",
186
- "@vitest/pretty-format": "4.0.15",
187
- "@vitest/runner": "4.0.15",
188
- "@vitest/mocker": "4.0.15",
189
- "@vitest/snapshot": "4.0.15",
190
- "@vitest/utils": "4.0.15",
191
- "@vitest/spy": "4.0.15"
185
+ "@vitest/expect": "4.0.17",
186
+ "@vitest/pretty-format": "4.0.17",
187
+ "@vitest/mocker": "4.0.17",
188
+ "@vitest/runner": "4.0.17",
189
+ "@vitest/spy": "4.0.17",
190
+ "@vitest/snapshot": "4.0.17",
191
+ "@vitest/utils": "4.0.17"
192
192
  },
193
193
  "devDependencies": {
194
194
  "@antfu/install-pkg": "^1.1.0",
@@ -205,7 +205,7 @@
205
205
  "@types/prompts": "^2.4.9",
206
206
  "@types/sinonjs__fake-timers": "^8.1.5",
207
207
  "acorn-walk": "^8.3.4",
208
- "birpc": "^2.8.0",
208
+ "birpc": "^4.0.0",
209
209
  "cac": "^6.7.14",
210
210
  "empathic": "^2.0.0",
211
211
  "flatted": "^3.3.3",
@@ -1,220 +0,0 @@
1
- const TYPE_REQUEST = "q";
2
- const TYPE_RESPONSE = "s";
3
- const DEFAULT_TIMEOUT = 6e4;
4
- function defaultSerialize(i) {
5
- return i;
6
- }
7
- const defaultDeserialize = defaultSerialize;
8
- const { clearTimeout, setTimeout } = globalThis;
9
- const random = Math.random.bind(Math);
10
- function createBirpc($functions, options) {
11
- const {
12
- post,
13
- on,
14
- off = () => {
15
- },
16
- eventNames = [],
17
- serialize = defaultSerialize,
18
- deserialize = defaultDeserialize,
19
- resolver,
20
- bind = "rpc",
21
- timeout = DEFAULT_TIMEOUT
22
- } = options;
23
- let $closed = false;
24
- const _rpcPromiseMap = /* @__PURE__ */ new Map();
25
- let _promiseInit;
26
- async function _call(method, args, event, optional) {
27
- if ($closed)
28
- throw new Error(`[birpc] rpc is closed, cannot call "${method}"`);
29
- const req = { m: method, a: args, t: TYPE_REQUEST };
30
- if (optional)
31
- req.o = true;
32
- const send = async (_req) => post(serialize(_req));
33
- if (event) {
34
- await send(req);
35
- return;
36
- }
37
- if (_promiseInit) {
38
- try {
39
- await _promiseInit;
40
- } finally {
41
- _promiseInit = void 0;
42
- }
43
- }
44
- let { promise, resolve, reject } = createPromiseWithResolvers();
45
- const id = nanoid();
46
- req.i = id;
47
- let timeoutId;
48
- async function handler(newReq = req) {
49
- if (timeout >= 0) {
50
- timeoutId = setTimeout(() => {
51
- try {
52
- const handleResult = options.onTimeoutError?.(method, args);
53
- if (handleResult !== true)
54
- throw new Error(`[birpc] timeout on calling "${method}"`);
55
- } catch (e) {
56
- reject(e);
57
- }
58
- _rpcPromiseMap.delete(id);
59
- }, timeout);
60
- if (typeof timeoutId === "object")
61
- timeoutId = timeoutId.unref?.();
62
- }
63
- _rpcPromiseMap.set(id, { resolve, reject, timeoutId, method });
64
- await send(newReq);
65
- return promise;
66
- }
67
- try {
68
- if (options.onRequest)
69
- await options.onRequest(req, handler, resolve);
70
- else
71
- await handler();
72
- } catch (e) {
73
- if (options.onGeneralError?.(e) !== true)
74
- throw e;
75
- return;
76
- } finally {
77
- clearTimeout(timeoutId);
78
- _rpcPromiseMap.delete(id);
79
- }
80
- return promise;
81
- }
82
- const $call = (method, ...args) => _call(method, args, false);
83
- const $callOptional = (method, ...args) => _call(method, args, false, true);
84
- const $callEvent = (method, ...args) => _call(method, args, true);
85
- const $callRaw = (options2) => _call(options2.method, options2.args, options2.event, options2.optional);
86
- const builtinMethods = {
87
- $call,
88
- $callOptional,
89
- $callEvent,
90
- $callRaw,
91
- $rejectPendingCalls,
92
- get $closed() {
93
- return $closed;
94
- },
95
- $close,
96
- $functions
97
- };
98
- const rpc = new Proxy({}, {
99
- get(_, method) {
100
- if (Object.prototype.hasOwnProperty.call(builtinMethods, method))
101
- return builtinMethods[method];
102
- if (method === "then" && !eventNames.includes("then") && !("then" in $functions))
103
- return void 0;
104
- const sendEvent = (...args) => _call(method, args, true);
105
- if (eventNames.includes(method)) {
106
- sendEvent.asEvent = sendEvent;
107
- return sendEvent;
108
- }
109
- const sendCall = (...args) => _call(method, args, false);
110
- sendCall.asEvent = sendEvent;
111
- return sendCall;
112
- }
113
- });
114
- function $close(customError) {
115
- $closed = true;
116
- _rpcPromiseMap.forEach(({ reject, method }) => {
117
- const error = new Error(`[birpc] rpc is closed, cannot call "${method}"`);
118
- if (customError) {
119
- customError.cause ??= error;
120
- return reject(customError);
121
- }
122
- reject(error);
123
- });
124
- _rpcPromiseMap.clear();
125
- off(onMessage);
126
- }
127
- function $rejectPendingCalls(handler) {
128
- const entries = Array.from(_rpcPromiseMap.values());
129
- const handlerResults = entries.map(({ method, reject }) => {
130
- if (!handler) {
131
- return reject(new Error(`[birpc]: rejected pending call "${method}".`));
132
- }
133
- return handler({ method, reject });
134
- });
135
- _rpcPromiseMap.clear();
136
- return handlerResults;
137
- }
138
- async function onMessage(data, ...extra) {
139
- let msg;
140
- try {
141
- msg = deserialize(data);
142
- } catch (e) {
143
- if (options.onGeneralError?.(e) !== true)
144
- throw e;
145
- return;
146
- }
147
- if (msg.t === TYPE_REQUEST) {
148
- const { m: method, a: args, o: optional } = msg;
149
- let result, error;
150
- let fn = await (resolver ? resolver(method, $functions[method]) : $functions[method]);
151
- if (optional)
152
- fn ||= () => void 0;
153
- if (!fn) {
154
- error = new Error(`[birpc] function "${method}" not found`);
155
- } else {
156
- try {
157
- result = await fn.apply(bind === "rpc" ? rpc : $functions, args);
158
- } catch (e) {
159
- error = e;
160
- }
161
- }
162
- if (msg.i) {
163
- if (error && options.onError)
164
- options.onError(error, method, args);
165
- if (error && options.onFunctionError) {
166
- if (options.onFunctionError(error, method, args) === true)
167
- return;
168
- }
169
- if (!error) {
170
- try {
171
- await post(serialize({ t: TYPE_RESPONSE, i: msg.i, r: result }), ...extra);
172
- return;
173
- } catch (e) {
174
- error = e;
175
- if (options.onGeneralError?.(e, method, args) !== true)
176
- throw e;
177
- }
178
- }
179
- try {
180
- await post(serialize({ t: TYPE_RESPONSE, i: msg.i, e: error }), ...extra);
181
- } catch (e) {
182
- if (options.onGeneralError?.(e, method, args) !== true)
183
- throw e;
184
- }
185
- }
186
- } else {
187
- const { i: ack, r: result, e: error } = msg;
188
- const promise = _rpcPromiseMap.get(ack);
189
- if (promise) {
190
- clearTimeout(promise.timeoutId);
191
- if (error)
192
- promise.reject(error);
193
- else
194
- promise.resolve(result);
195
- }
196
- _rpcPromiseMap.delete(ack);
197
- }
198
- }
199
- _promiseInit = on(onMessage);
200
- return rpc;
201
- }
202
- function createPromiseWithResolvers() {
203
- let resolve;
204
- let reject;
205
- const promise = new Promise((res, rej) => {
206
- resolve = res;
207
- reject = rej;
208
- });
209
- return { promise, resolve, reject };
210
- }
211
- const urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
212
- function nanoid(size = 21) {
213
- let id = "";
214
- let i = size;
215
- while (i--)
216
- id += urlAlphabet[random() * 64 | 0];
217
- return id;
218
- }
219
-
220
- export { createBirpc as c };