@efffrida/vitest-pool 0.0.16 → 0.0.18
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.
- package/package.json +15 -14
- package/dist/frida/agent.d.ts +0 -2
- package/dist/frida/agent.d.ts.map +0 -1
- package/dist/frida/agent.js +0 -185
- package/dist/frida/agent.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@efffrida/vitest-pool",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "effect frida vitest-pool",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect-ts",
|
|
@@ -35,35 +35,35 @@
|
|
|
35
35
|
"provenance": true
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"ioredis": "5.
|
|
39
|
-
"@efffrida/frida-tools": "0.0.
|
|
38
|
+
"ioredis": "5.11.0",
|
|
39
|
+
"@efffrida/frida-tools": "0.0.31"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@effect/platform-node": "4.0.0-beta.69",
|
|
43
43
|
"@types/frida-gum": "19.1.0",
|
|
44
|
-
"@types/node": "25.9.
|
|
45
|
-
"@vitest/runner": "4.1.
|
|
46
|
-
"@vitest/utils": "4.1.
|
|
44
|
+
"@types/node": "25.9.1",
|
|
45
|
+
"@vitest/runner": "4.1.7",
|
|
46
|
+
"@vitest/utils": "4.1.7",
|
|
47
47
|
"birpc": "4.0.0",
|
|
48
48
|
"effect": "4.0.0-beta.69",
|
|
49
49
|
"flatted": "3.4.2",
|
|
50
|
-
"frida": "17.9.
|
|
50
|
+
"frida": "17.9.11",
|
|
51
51
|
"vite": "8.0.14",
|
|
52
|
-
"vitest": "4.1.
|
|
53
|
-
"@efffrida/polyfills": "0.0.
|
|
52
|
+
"vitest": "4.1.7",
|
|
53
|
+
"@efffrida/polyfills": "0.0.10"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@effect/platform-node": "4.0.0-beta.69",
|
|
57
57
|
"effect": "4.0.0-beta.69",
|
|
58
|
-
"vitest": "4.1.
|
|
58
|
+
"vitest": "4.1.7"
|
|
59
59
|
},
|
|
60
60
|
"optionalDependencies": {
|
|
61
|
-
"@vitest/runner": "4.1.
|
|
62
|
-
"@vitest/utils": "4.1.
|
|
61
|
+
"@vitest/runner": "4.1.7",
|
|
62
|
+
"@vitest/utils": "4.1.7",
|
|
63
63
|
"birpc": "4.0.0",
|
|
64
64
|
"flatted": "3.4.2",
|
|
65
65
|
"vite": "8.0.14",
|
|
66
|
-
"@efffrida/polyfills": "0.0.
|
|
66
|
+
"@efffrida/polyfills": "0.0.10"
|
|
67
67
|
},
|
|
68
68
|
"tags": [
|
|
69
69
|
"frida.re",
|
|
@@ -72,7 +72,8 @@
|
|
|
72
72
|
],
|
|
73
73
|
"scripts": {
|
|
74
74
|
"codegen": "build-utils prepare-v4",
|
|
75
|
-
"build": "tsc -b tsconfig.build.json && pnpm babel",
|
|
75
|
+
"build": "tsc -b tsconfig.build.json && pnpm copy-frida && pnpm babel",
|
|
76
|
+
"copy-frida": "node -e \"const {cpSync}=require('fs');cpSync('frida','dist/frida',{recursive:true,force:true})\"",
|
|
76
77
|
"babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps",
|
|
77
78
|
"check": "tsc -b tsconfig.json",
|
|
78
79
|
"test": "vitest",
|
package/dist/frida/agent.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../frida/agent.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC"}
|
package/dist/frida/agent.js
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import "@efffrida/polyfills";
|
|
2
|
-
// QuickJS returns Error.stack as a boxed String object, not a primitive. This
|
|
3
|
-
// causes @vitest/utils serializeValue to walk it as a char-indexed object
|
|
4
|
-
// {"0":"A","1":"s",...}. Adding toJSON makes serializeValue call valueOf()
|
|
5
|
-
// instead, returning the primitive string.
|
|
6
|
-
if (!("toJSON" in String.prototype)) {
|
|
7
|
-
String.prototype.toJSON = String.prototype.valueOf;
|
|
8
|
-
}
|
|
9
|
-
import { collectTests, startTests } from "@vitest/runner";
|
|
10
|
-
import { serializeError } from "@vitest/utils/error";
|
|
11
|
-
import { createStackString, parseStacktrace } from "@vitest/utils/source-map";
|
|
12
|
-
import { createBirpc } from "birpc";
|
|
13
|
-
import { stringify as flattedStringify } from "flatted";
|
|
14
|
-
import { EvaluatedModules } from "vitest";
|
|
15
|
-
// There should only ever be one test running at a time in a worker and these
|
|
16
|
-
// need to be shared across multiple rpc calls anyways so they will live up here
|
|
17
|
-
// in the module scope.
|
|
18
|
-
let runPromise;
|
|
19
|
-
let setupContext;
|
|
20
|
-
// Collections of listeners
|
|
21
|
-
const cleanupListeners = /*#__PURE__*/new Set();
|
|
22
|
-
const cancelListeners = /*#__PURE__*/new Set();
|
|
23
|
-
const messageListeners = /*#__PURE__*/new Set();
|
|
24
|
-
// Bidirectional rpc
|
|
25
|
-
const birpc = /*#__PURE__*/createBirpc({
|
|
26
|
-
async onCancel(reason) {
|
|
27
|
-
await Promise.allSettled([...cancelListeners.values()].map(listener => listener(reason)));
|
|
28
|
-
}
|
|
29
|
-
}, {
|
|
30
|
-
// How to send and receive messages.
|
|
31
|
-
on: rpcListener => messageListeners.add(rpcListener),
|
|
32
|
-
off: rpcListener => messageListeners.delete(rpcListener),
|
|
33
|
-
post: message => typeof message === "string" ? send(message) : send(flattedStringify(message)),
|
|
34
|
-
// Names of remote functions that do not need response.
|
|
35
|
-
// These are fire-and-forget messages to the vitest pool coordinator.
|
|
36
|
-
eventNames: ["onUserConsoleLog", "onCollected", "onCancel"],
|
|
37
|
-
// Maximum timeout for waiting for response, in milliseconds.
|
|
38
|
-
timeout: -1
|
|
39
|
-
});
|
|
40
|
-
/** @see https://github.com/vitest-dev/vitest/blob/8508296e9adcd2d9859e8073ac76c0bcb7d78f50/packages/vitest/src/runtime/utils.ts#L23-L32 */
|
|
41
|
-
function provideWorkerState(context, state) {
|
|
42
|
-
const NAME_WORKER_STATE = "__vitest_worker__";
|
|
43
|
-
Object.defineProperty(context, NAME_WORKER_STATE, {
|
|
44
|
-
value: state,
|
|
45
|
-
configurable: true,
|
|
46
|
-
writable: true,
|
|
47
|
-
enumerable: false
|
|
48
|
-
});
|
|
49
|
-
return state;
|
|
50
|
-
}
|
|
51
|
-
/** @see https://github.com/vitest-dev/vitest/blob/9ca74cfb2060d8bc1c7a319ba3cba1578517adb0/packages/vitest/src/runtime/runners/index.ts#L65-L139 */
|
|
52
|
-
function patchTestRunner(testRunner) {
|
|
53
|
-
const originalOnTaskUpdate = testRunner.onTaskUpdate;
|
|
54
|
-
testRunner.onTaskUpdate = async (task, events) => {
|
|
55
|
-
await birpc.onTaskUpdate(task, events);
|
|
56
|
-
await originalOnTaskUpdate?.call(testRunner, task, events);
|
|
57
|
-
};
|
|
58
|
-
const originalOnCollectStart = testRunner.onCollectStart;
|
|
59
|
-
testRunner.onCollectStart = async file => {
|
|
60
|
-
await birpc.onQueued(file);
|
|
61
|
-
await originalOnCollectStart?.call(testRunner, file);
|
|
62
|
-
};
|
|
63
|
-
const originalOnCollected = testRunner.onCollected;
|
|
64
|
-
testRunner.onCollected = async files => {
|
|
65
|
-
await birpc.onCollected(files);
|
|
66
|
-
await originalOnCollected?.call(testRunner, files);
|
|
67
|
-
};
|
|
68
|
-
return testRunner;
|
|
69
|
-
}
|
|
70
|
-
/** @see https://github.com/vitest-dev/vitest/blob/4f58c77147796d48bf70579222a577df977300f8/packages/vitest/src/runtime/workers/init.ts#L20-L235 */
|
|
71
|
-
rpc.exports["onMessage"] = async message => {
|
|
72
|
-
// Predicate to check if a message is a worker request
|
|
73
|
-
const isWorkerRequest = u => typeof u === "object" && u !== null && "__vitest_worker_request__" in u && u.__vitest_worker_request__ === true;
|
|
74
|
-
// Handle non-worker messages
|
|
75
|
-
if (!isWorkerRequest(message)) {
|
|
76
|
-
return messageListeners.forEach(listener => {
|
|
77
|
-
listener(message);
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
// Handle worker messages
|
|
81
|
-
switch (message.type) {
|
|
82
|
-
case "start":
|
|
83
|
-
{
|
|
84
|
-
process.env.VITEST_POOL_ID = String(message.poolId);
|
|
85
|
-
process.env.VITEST_WORKER_ID = String(message.workerId);
|
|
86
|
-
const {
|
|
87
|
-
config,
|
|
88
|
-
environment,
|
|
89
|
-
pool
|
|
90
|
-
} = message.context;
|
|
91
|
-
setupContext = {
|
|
92
|
-
environment,
|
|
93
|
-
config,
|
|
94
|
-
pool,
|
|
95
|
-
rpc: birpc,
|
|
96
|
-
projectName: config.name ?? ""
|
|
97
|
-
};
|
|
98
|
-
return send({
|
|
99
|
-
type: "started",
|
|
100
|
-
__vitest_worker_response__: true
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
case "stop":
|
|
104
|
-
{
|
|
105
|
-
if (runPromise !== undefined) await runPromise;
|
|
106
|
-
await Promise.allSettled(setupContext.rpc.$rejectPendingCalls(({
|
|
107
|
-
method,
|
|
108
|
-
reject
|
|
109
|
-
}) => {
|
|
110
|
-
reject(`Closing rpc while ${method} was pending`);
|
|
111
|
-
}));
|
|
112
|
-
await Promise.allSettled([...cleanupListeners.values()].map(listener => listener()));
|
|
113
|
-
cancelListeners.clear();
|
|
114
|
-
cleanupListeners.clear();
|
|
115
|
-
return send({
|
|
116
|
-
type: "stopped",
|
|
117
|
-
__vitest_worker_response__: true
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
case "run":
|
|
121
|
-
case "collect":
|
|
122
|
-
{
|
|
123
|
-
if (runPromise !== undefined) {
|
|
124
|
-
return send({
|
|
125
|
-
type: "testfileFinished",
|
|
126
|
-
__vitest_worker_response__: true,
|
|
127
|
-
error: serializeError("Worker is already running tests")
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
/** @see https://github.com/vitest-dev/vitest/blob/4f58c77147796d48bf70579222a577df977300f8/packages/vitest/src/runtime/worker.ts#L28-L49 */
|
|
131
|
-
provideWorkerState(globalThis, {
|
|
132
|
-
rpc: birpc,
|
|
133
|
-
environment: null,
|
|
134
|
-
config: setupContext.config,
|
|
135
|
-
durations: {
|
|
136
|
-
environment: 0,
|
|
137
|
-
prepare: 0
|
|
138
|
-
},
|
|
139
|
-
ctx: {
|
|
140
|
-
...setupContext,
|
|
141
|
-
...message.context
|
|
142
|
-
},
|
|
143
|
-
providedContext: message.context.providedContext,
|
|
144
|
-
metaEnv: process.env,
|
|
145
|
-
resolvingModules: new Set(),
|
|
146
|
-
// TODO: share this between runs? https://github.com/vitest-dev/vitest/blob/8508296e9adcd2d9859e8073ac76c0bcb7d78f50/packages/vitest/src/runtime/worker.ts#L9
|
|
147
|
-
moduleExecutionInfo: new Map(),
|
|
148
|
-
// TODO: share this between runs? https://github.com/vitest-dev/vitest/blob/4f58c77147796d48bf70579222a577df977300f8/packages/vitest/src/runtime/workers/base.ts#L18-L19
|
|
149
|
-
evaluatedModules: new EvaluatedModules(),
|
|
150
|
-
// TODO: share this between runs? https://github.com/vitest-dev/vitest/blob/4f58c77147796d48bf70579222a577df977300f8/packages/vitest/src/runtime/workers/base.ts#L18-L19
|
|
151
|
-
onCancel: listener => cancelListeners.add(listener),
|
|
152
|
-
onCleanup: listener => cleanupListeners.add(listener),
|
|
153
|
-
onFilterStackTrace: stack => createStackString(parseStacktrace(stack))
|
|
154
|
-
});
|
|
155
|
-
// Create a minimal runner without snapshot support
|
|
156
|
-
const entrypoint = message.type === "run" ? startTests : collectTests;
|
|
157
|
-
const testRunner = {
|
|
158
|
-
config: setupContext.config,
|
|
159
|
-
importFile: async _file => {
|
|
160
|
-
// @efffrida/vitest-pool/agent/file-map
|
|
161
|
-
return Promise.reject("importFile is not supported in the frida pool agent");
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
try {
|
|
165
|
-
for (const file of message.context.files) {
|
|
166
|
-
runPromise = entrypoint([file], patchTestRunner(testRunner));
|
|
167
|
-
await runPromise;
|
|
168
|
-
}
|
|
169
|
-
return send({
|
|
170
|
-
type: "testfileFinished",
|
|
171
|
-
__vitest_worker_response__: true
|
|
172
|
-
});
|
|
173
|
-
} catch (error) {
|
|
174
|
-
return send({
|
|
175
|
-
type: "testfileFinished",
|
|
176
|
-
__vitest_worker_response__: true,
|
|
177
|
-
error: serializeError(error)
|
|
178
|
-
});
|
|
179
|
-
} finally {
|
|
180
|
-
runPromise = undefined;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
//# sourceMappingURL=agent.js.map
|
package/dist/frida/agent.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","names":["String","prototype","toJSON","valueOf","collectTests","startTests","serializeError","createStackString","parseStacktrace","createBirpc","stringify","flattedStringify","EvaluatedModules","runPromise","setupContext","cleanupListeners","Set","cancelListeners","messageListeners","birpc","onCancel","reason","Promise","allSettled","values","map","listener","on","rpcListener","add","off","delete","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","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":[]}
|