@efffrida/vitest-pool 0.0.12 → 0.0.14

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.
@@ -5,44 +5,25 @@ import { createStackString, parseStacktrace } from "@vitest/utils/source-map";
5
5
  import { createBirpc } from "birpc";
6
6
  import { stringify as flattedStringify } from "flatted";
7
7
  import { EvaluatedModules } from "vitest";
8
- const testFiles = {};
9
8
  // There should only ever be one test running at a time in a worker and these
10
9
  // need to be shared across multiple rpc calls anyways so they will live up here
11
10
  // in the module scope.
12
11
  let runPromise;
13
12
  let setupContext;
14
- // How to post messages to the parent process - use flatted to handle circular references
15
- const postMessage = message => send(flattedStringify(message, (_key, value) => {
16
- /** @see https://github.com/vitest-dev/vitest/blob/372e86fdef381038a2c4999fc9007dd7292a0628/packages/vitest/src/node/ast-collect.ts#L216-L236 */
17
- if (value !== null && typeof value === "object" && "name" in value && "message" in value && "stack" in value && typeof value.stack !== "string") {
18
- return {
19
- ...value,
20
- stack: value.stack === undefined ? undefined : JSON.stringify(value.stack)
21
- };
22
- } else {
23
- return value;
24
- }
25
- }));
26
- const postWorkerResponse = response => postMessage({
27
- ...response,
28
- __vitest_worker_response__: true
29
- });
30
13
  // Collections of listeners
31
14
  const cleanupListeners = /*#__PURE__*/new Set();
32
15
  const cancelListeners = /*#__PURE__*/new Set();
33
16
  const messageListeners = /*#__PURE__*/new Set();
17
+ // Bidirectional rpc
34
18
  const birpc = /*#__PURE__*/createBirpc({
35
19
  async onCancel(reason) {
36
20
  await Promise.allSettled([...cancelListeners.values()].map(listener => listener(reason)));
37
21
  }
38
22
  }, {
39
- // How to serialize and deserialize messages.
40
- serialize: data => data,
41
- deserialize: data => data,
42
23
  // How to send and receive messages.
43
- post: postMessage,
44
- on: rpcListener => messageListeners.add(rpcListener),
45
24
  off: rpcListener => messageListeners.delete(rpcListener),
25
+ on: rpcListener => messageListeners.add(rpcListener),
26
+ post: message => typeof message === "string" ? send(message) : send(flattedStringify(message)),
46
27
  // Names of remote functions that do not need response.
47
28
  // These are fire-and-forget messages to the vitest pool coordinator.
48
29
  eventNames: ["onUserConsoleLog", "onCollected", "onCancel"],
@@ -107,8 +88,9 @@ rpc.exports["onMessage"] = async message => {
107
88
  rpc: birpc,
108
89
  projectName: config.name ?? ""
109
90
  };
110
- return postWorkerResponse({
111
- type: "started"
91
+ return send({
92
+ type: "started",
93
+ __vitest_worker_response__: true
112
94
  });
113
95
  }
114
96
  case "stop":
@@ -123,16 +105,18 @@ rpc.exports["onMessage"] = async message => {
123
105
  await Promise.allSettled([...cleanupListeners.values()].map(listener => listener()));
124
106
  cancelListeners.clear();
125
107
  cleanupListeners.clear();
126
- return postWorkerResponse({
127
- type: "stopped"
108
+ return send({
109
+ type: "stopped",
110
+ __vitest_worker_response__: true
128
111
  });
129
112
  }
130
113
  case "run":
131
114
  case "collect":
132
115
  {
133
116
  if (runPromise !== undefined) {
134
- return postWorkerResponse({
117
+ return send({
135
118
  type: "testfileFinished",
119
+ __vitest_worker_response__: true,
136
120
  error: serializeError("Worker is already running tests")
137
121
  });
138
122
  }
@@ -165,50 +149,9 @@ rpc.exports["onMessage"] = async message => {
165
149
  const entrypoint = message.type === "run" ? startTests : collectTests;
166
150
  const testRunner = {
167
151
  config: setupContext.config,
168
- importFile: async file => {
169
- const nodeAssert = await import("node:assert");
170
- const nodeBuffer = await import("node:buffer");
171
- const nodeCrypto = await import("node:crypto");
172
- const diagnosticsChannel = await import("node:diagnostics_channel");
173
- const nodeEvents = await import("node:events");
174
- const nodeFs = await import("node:fs");
175
- const nodeNet = await import("node:net");
176
- const nodeOs = await import("node:os");
177
- const nodePath = await import("node:path");
178
- const nodeProcess = await import("node:process");
179
- const nodeStream = await import("node:stream");
180
- const nodeTimers = await import("node:timers");
181
- const nodeTty = await import("node:tty");
182
- const nodeUrl = await import("node:url");
183
- const nodeUtil = await import("node:util");
184
- const nodeVm = await import("node:vm");
185
- const vitestModule = await import("vitest");
186
- const vitestRunnerModule = await import("@vitest/runner");
187
- globalThis.__node_assert = nodeAssert;
188
- globalThis.__node_buffer = nodeBuffer;
189
- globalThis.__node_crypto = nodeCrypto;
190
- globalThis.__node_diagnosticsChannel = diagnosticsChannel;
191
- globalThis.__node_events = nodeEvents;
192
- globalThis.__node_fs = nodeFs;
193
- globalThis.__node_net = nodeNet;
194
- globalThis.__node_os = nodeOs;
195
- globalThis.__node_path = nodePath;
196
- globalThis.__node_process = nodeProcess;
197
- globalThis.__node_stream = nodeStream;
198
- globalThis.__node_timers = nodeTimers;
199
- globalThis.__node_tty = nodeTty;
200
- globalThis.__node_url = nodeUrl;
201
- globalThis.__node_util = nodeUtil;
202
- globalThis.__node_vm = nodeVm;
203
- globalThis.__vitest = vitestModule;
204
- globalThis.__vitest_runner = vitestRunnerModule;
205
- // TODO: warning if file not found
206
- const source64 = testFiles[file];
207
- if (source64 === undefined) {
208
- return;
209
- }
210
- const source = Buffer.from(source64, "base64").toString("utf-8");
211
- await Script.load(file, source);
152
+ importFile: async _file => {
153
+ // @efffrida/vitest-pool/agent/file-map
154
+ return Promise.reject("importFile is not supported in the frida pool agent");
212
155
  }
213
156
  };
214
157
  try {
@@ -216,12 +159,14 @@ rpc.exports["onMessage"] = async message => {
216
159
  runPromise = entrypoint([file], patchTestRunner(testRunner));
217
160
  await runPromise;
218
161
  }
219
- postWorkerResponse({
220
- type: "testfileFinished"
162
+ return send({
163
+ type: "testfileFinished",
164
+ __vitest_worker_response__: true
221
165
  });
222
166
  } catch (error) {
223
- postWorkerResponse({
167
+ return send({
224
168
  type: "testfileFinished",
169
+ __vitest_worker_response__: true,
225
170
  error: serializeError(error)
226
171
  });
227
172
  } finally {
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","names":["collectTests","startTests","serializeError","createStackString","parseStacktrace","createBirpc","stringify","flattedStringify","EvaluatedModules","testFiles","runPromise","setupContext","postMessage","message","send","_key","value","stack","undefined","JSON","postWorkerResponse","response","__vitest_worker_response__","cleanupListeners","Set","cancelListeners","messageListeners","birpc","onCancel","reason","Promise","allSettled","values","map","listener","serialize","data","deserialize","post","on","rpcListener","add","off","delete","eventNames","timeout","provideWorkerState","context","state","NAME_WORKER_STATE","Object","defineProperty","configurable","writable","enumerable","patchTestRunner","testRunner","originalOnTaskUpdate","onTaskUpdate","task","events","call","originalOnCollectStart","onCollectStart","file","onQueued","originalOnCollected","onCollected","files","rpc","exports","isWorkerRequest","u","__vitest_worker_request__","forEach","type","process","env","VITEST_POOL_ID","String","poolId","VITEST_WORKER_ID","workerId","config","environment","pool","projectName","name","$rejectPendingCalls","method","reject","clear","error","globalThis","durations","prepare","ctx","providedContext","metaEnv","resolvingModules","moduleExecutionInfo","Map","evaluatedModules","onCleanup","onFilterStackTrace","entrypoint","importFile","nodeAssert","nodeBuffer","nodeCrypto","diagnosticsChannel","nodeEvents","nodeFs","nodeNet","nodeOs","nodePath","nodeProcess","nodeStream","nodeTimers","nodeTty","nodeUrl","nodeUtil","nodeVm","vitestModule","vitestRunnerModule","__node_assert","__node_buffer","__node_crypto","__node_diagnosticsChannel","__node_events","__node_fs","__node_net","__node_os","__node_path","__node_process","__node_stream","__node_timers","__node_tty","__node_url","__node_util","__node_vm","__vitest","__vitest_runner","source64","source","Buffer","from","toString","Script","load"],"sources":["../../frida/agent.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"agent.js","names":["collectTests","startTests","serializeError","createStackString","parseStacktrace","createBirpc","stringify","flattedStringify","EvaluatedModules","runPromise","setupContext","cleanupListeners","Set","cancelListeners","messageListeners","birpc","onCancel","reason","Promise","allSettled","values","map","listener","off","rpcListener","delete","on","add","post","message","send","eventNames","timeout","provideWorkerState","context","state","NAME_WORKER_STATE","Object","defineProperty","value","configurable","writable","enumerable","patchTestRunner","testRunner","originalOnTaskUpdate","onTaskUpdate","task","events","call","originalOnCollectStart","onCollectStart","file","onQueued","originalOnCollected","onCollected","files","rpc","exports","isWorkerRequest","u","__vitest_worker_request__","forEach","type","process","env","VITEST_POOL_ID","String","poolId","VITEST_WORKER_ID","workerId","config","environment","pool","projectName","name","__vitest_worker_response__","undefined","$rejectPendingCalls","method","reject","clear","error","globalThis","durations","prepare","ctx","providedContext","metaEnv","resolvingModules","moduleExecutionInfo","Map","evaluatedModules","onCleanup","onFilterStackTrace","stack","entrypoint","importFile","_file"],"sources":["../../frida/agent.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,81 +1,49 @@
1
- import type * as VitestNode from "vitest/node";
2
1
  import * as Schema from "effect/Schema";
3
- declare const DeviceSchema_base: Schema.Union<[Schema.Struct<{
4
- device: Schema.Literal<["local"]>;
5
- }>, Schema.Struct<{
6
- device: Schema.Literal<["usb"]>;
7
- timeout: Schema.optionalWith<typeof Schema.DurationFromMillis, {
8
- nullable: true;
9
- }>;
10
- }>, Schema.Struct<{
11
- address: typeof Schema.String;
12
- device: Schema.Literal<["remote"]>;
13
- token: Schema.optionalWith<typeof Schema.String, {
14
- nullable: true;
15
- }>;
16
- origin: Schema.optionalWith<typeof Schema.String, {
17
- nullable: true;
18
- }>;
19
- keepaliveInterval: Schema.optionalWith<typeof Schema.DurationFromMillis, {
20
- nullable: true;
21
- }>;
22
- }>, Schema.Struct<{
23
- emulatorName: typeof Schema.String;
24
- device: Schema.Literal<["android-emulator"]>;
25
- hidden: Schema.optionalWith<typeof Schema.Boolean, {
26
- nullable: true;
27
- }>;
28
- adbExecutable: Schema.optionalWith<typeof Schema.String, {
29
- nullable: true;
30
- }>;
31
- fridaExecutable: Schema.optionalWith<typeof Schema.String, {
32
- nullable: true;
33
- }>;
34
- emulatorExecutable: Schema.optionalWith<typeof Schema.String, {
35
- nullable: true;
36
- }>;
37
- }>]>;
38
- declare class DeviceSchema extends DeviceSchema_base {
39
- }
40
- declare const AttachSchema_base: Schema.Union<[Schema.Struct<{
41
- attach: Schema.brand<typeof Schema.Number, "pid">;
42
- }>, Schema.Struct<{
43
- spawn: Schema.NonEmptyArrayEnsure<typeof Schema.String>;
44
- preSpawn: Schema.optionalWith<typeof Schema.Boolean, {
45
- nullable: true;
46
- }>;
47
- }>, Schema.Struct<{
48
- attachFrontmost: Schema.Literal<[true]>;
49
- frontmostScope: Schema.optionalWith<Schema.Literal<["minimal", "metadata", "full"]>, {
50
- nullable: true;
51
- }>;
52
- }>]>;
53
- declare class AttachSchema extends AttachSchema_base {
54
- }
55
- declare const ConfigSchema_base: Schema.extend<Schema.extend<Schema.Struct<{
56
- runtime: Schema.optionalWith<Schema.Literal<["default", "qjs", "v8"]>, {
57
- nullable: true;
58
- }>;
59
- platform: Schema.optionalWith<Schema.Literal<["gum", "browser", "neutral"]>, {
60
- nullable: true;
61
- }>;
62
- }>, typeof DeviceSchema>, typeof AttachSchema>;
63
- declare class ConfigSchema extends ConfigSchema_base {
64
- }
2
+ import type * as VitestNode from "vitest/node";
3
+ declare const ConfigSchema: Schema.Struct<{
4
+ readonly device: Schema.Union<readonly [Schema.Struct<{
5
+ readonly connection: Schema.Literal<"local">;
6
+ }>, Schema.Struct<{
7
+ readonly connection: Schema.Literal<"usb">;
8
+ readonly timeout: Schema.optional<Schema.DurationFromMillis>;
9
+ }>, Schema.Struct<{
10
+ readonly address: Schema.String;
11
+ readonly connection: Schema.Literal<"remote">;
12
+ readonly token: Schema.optional<Schema.String>;
13
+ readonly origin: Schema.optional<Schema.String>;
14
+ readonly keepaliveInterval: Schema.optional<Schema.DurationFromMillis>;
15
+ }>, Schema.Struct<{
16
+ readonly emulatorName: Schema.String;
17
+ readonly hidden: Schema.optional<Schema.Boolean>;
18
+ readonly adbExecutable: Schema.optional<Schema.String>;
19
+ readonly connection: Schema.Literal<"android-emulator">;
20
+ readonly fridaExecutable: Schema.optional<Schema.String>;
21
+ readonly emulatorExecutable: Schema.optional<Schema.String>;
22
+ }>]>;
23
+ readonly attach: Schema.Union<readonly [Schema.Struct<{
24
+ readonly pid: Schema.Number;
25
+ }>, Schema.Struct<{
26
+ readonly spawn: Schema.NonEmptyArray<Schema.String>;
27
+ readonly preSpawn: Schema.optional<Schema.Boolean>;
28
+ }>, Schema.Struct<{
29
+ readonly attachFrontmost: Schema.Literal<true>;
30
+ readonly frontmostScope: Schema.optional<Schema.Literals<readonly ["minimal", "metadata", "full"]>>;
31
+ }>]>;
32
+ readonly runtime: Schema.optional<Schema.Literals<readonly ["default", "qjs", "v8"]>>;
33
+ readonly platform: Schema.optional<Schema.Literals<readonly ["gum", "browser", "neutral"]>>;
34
+ }>;
65
35
  /**
66
36
  * @since 1.0.0
67
37
  * @category Tests
68
38
  */
69
39
  export declare class FridaPoolWorker implements VitestNode.PoolWorker {
70
40
  readonly name = "frida-pool";
71
- readonly agentTemplatePath: URL;
72
- private readonly poolOptions;
73
- private readonly customOptions;
41
+ private static initQueue;
42
+ private readonly scope;
43
+ private readonly scriptContext;
74
44
  private readonly cancelables;
75
- private modifiedAgentScope;
76
- private managedRuntime;
77
45
  private sends;
78
- constructor(poolOptions: VitestNode.PoolOptions, customOptions: Schema.Schema.Type<ConfigSchema>);
46
+ constructor(poolOptions: VitestNode.PoolOptions, customOptions: Schema.Schema.Type<typeof ConfigSchema>);
79
47
  start(): Promise<void>;
80
48
  stop(): Promise<void>;
81
49
  send(message: VitestNode.WorkerRequest): Promise<void>;
@@ -88,6 +56,6 @@ export declare class FridaPoolWorker implements VitestNode.PoolWorker {
88
56
  * @since 1.0.0
89
57
  * @category Tests
90
58
  */
91
- export declare const createFridaPool: (customOptions: Schema.Schema.Encoded<ConfigSchema>) => VitestNode.PoolRunnerInitializer;
59
+ export declare const createFridaPool: (customOptions: Schema.Codec.Encoded<typeof ConfigSchema>) => VitestNode.PoolRunnerInitializer;
92
60
  export {};
93
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,UAAU,MAAM,aAAa,CAAC;AAkB/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASxC,cAAM,YAAa,SAAQ,iBAuB1B;CAAG;;;;;;;;;;;;;;AAGJ,cAAM,YAAa,SAAQ,iBAY1B;CAAG;;;;;;;;;AAGJ,cAAM,YAAa,SAAQ,iBAIwC;CAAG;AAEtE;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU,CAAC,UAAU;IACzD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,iBAAiB,MAAiD;IAE3E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAQ1B;IAEF,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAON;IAChB,OAAO,CAAC,KAAK,CAUN;gBAEK,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAQ1F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmFtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAkDrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAQvD,WAAW,CAAC,IAAI,EAAE,OAAO;IAKzB,SAAS,CAAC,IAAI,EAAE,OAAO;CAG1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GACxB,eAAe,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KACnD,UAAU,CAAC,qBAMb,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,KAAK,KAAK,UAAU,MAAM,aAAa,CAAC;AAmD/C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhB,CAAC;AAEH;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU,CAAC,UAAU;IACzD,SAAgB,IAAI,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAE5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAClF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsE;IAElG,OAAO,CAAC,KAAK,CAA+B;gBAEhC,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC;IAwIjG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAe5D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IA8DrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAQvD,WAAW,CAAC,IAAI,EAAE,OAAO;IAKzB,SAAS,CAAC,IAAI,EAAE,OAAO;CAG1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GACxB,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,YAAY,CAAC,KACzD,UAAU,CAAC,qBAMb,CAAC"}