@stacks/clarinet-sdk 3.23.2 → 3.24.1

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 (50) hide show
  1. package/dist/cjs/common/src/sdkProxy.d.ts +32 -0
  2. package/dist/cjs/common/src/sdkProxy.js +88 -0
  3. package/dist/cjs/common/src/sdkProxy.js.map +1 -0
  4. package/dist/cjs/common/src/sdkProxyHelpers.d.ts +34 -12
  5. package/dist/cjs/common/src/sdkProxyHelpers.js +40 -8
  6. package/dist/cjs/common/src/sdkProxyHelpers.js.map +1 -1
  7. package/dist/cjs/node/src/debugClient.d.ts +78 -0
  8. package/dist/cjs/node/src/debugClient.js +242 -0
  9. package/dist/cjs/node/src/debugClient.js.map +1 -0
  10. package/dist/cjs/node/src/index.d.ts +3 -1
  11. package/dist/cjs/node/src/index.js +21 -1
  12. package/dist/cjs/node/src/index.js.map +1 -1
  13. package/dist/cjs/node/src/sdkProxy.d.ts +3 -10
  14. package/dist/cjs/node/src/sdkProxy.js +7 -98
  15. package/dist/cjs/node/src/sdkProxy.js.map +1 -1
  16. package/dist/cjs/node/src/syncDebugSimnet.d.ts +46 -0
  17. package/dist/cjs/node/src/syncDebugSimnet.js +180 -0
  18. package/dist/cjs/node/src/syncDebugSimnet.js.map +1 -0
  19. package/dist/cjs/node/src/syncDebugSocket.d.ts +12 -0
  20. package/dist/cjs/node/src/syncDebugSocket.js +281 -0
  21. package/dist/cjs/node/src/syncDebugSocket.js.map +1 -0
  22. package/dist/cjs/node/src/vfs.d.ts +2 -2
  23. package/dist/cjs/node/src/vfs.js.map +1 -1
  24. package/dist/cjs/node/tsconfig.cjs.tsbuildinfo +1 -1
  25. package/dist/esm/common/src/sdkProxy.d.ts +32 -0
  26. package/dist/esm/common/src/sdkProxy.js +85 -0
  27. package/dist/esm/common/src/sdkProxy.js.map +1 -0
  28. package/dist/esm/common/src/sdkProxyHelpers.d.ts +34 -12
  29. package/dist/esm/common/src/sdkProxyHelpers.js +40 -9
  30. package/dist/esm/common/src/sdkProxyHelpers.js.map +1 -1
  31. package/dist/esm/node/src/debugClient.d.ts +78 -0
  32. package/dist/esm/node/src/debugClient.js +204 -0
  33. package/dist/esm/node/src/debugClient.js.map +1 -0
  34. package/dist/esm/node/src/index.d.ts +3 -1
  35. package/dist/esm/node/src/index.js +18 -0
  36. package/dist/esm/node/src/index.js.map +1 -1
  37. package/dist/esm/node/src/sdkProxy.d.ts +3 -10
  38. package/dist/esm/node/src/sdkProxy.js +8 -99
  39. package/dist/esm/node/src/sdkProxy.js.map +1 -1
  40. package/dist/esm/node/src/syncDebugSimnet.d.ts +46 -0
  41. package/dist/esm/node/src/syncDebugSimnet.js +177 -0
  42. package/dist/esm/node/src/syncDebugSimnet.js.map +1 -0
  43. package/dist/esm/node/src/syncDebugSocket.d.ts +12 -0
  44. package/dist/esm/node/src/syncDebugSocket.js +276 -0
  45. package/dist/esm/node/src/syncDebugSocket.js.map +1 -0
  46. package/dist/esm/node/src/vfs.d.ts +2 -2
  47. package/dist/esm/node/src/vitest/index.d.ts +20 -20
  48. package/dist/esm/node/src/vitest/index.js.map +1 -1
  49. package/dist/esm/node/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +11 -10
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Synchronous simnet proxy that routes all calls to a `clarinet dap` debug server
3
+ * via a SharedArrayBuffer + Atomics.wait worker (see syncDebugSocket.ts).
4
+ *
5
+ * When CLARINET_DEBUG_PORT is set, initSimnet() returns one of these instead of
6
+ * the WASM simnet. The API surface is identical, so existing tests run unchanged
7
+ * while breakpoints in .clar files fire in VSCode (or any DAP-capable editor).
8
+ */
9
+ import { Cl } from "@stacks/transactions";
10
+ import { syncSend } from "./syncDebugSocket.js";
11
+ import { parseEvents, parseCosts, } from "../../common/src/sdkProxyHelpers.js";
12
+ function parseTxResult(r) {
13
+ if (!r.result) {
14
+ throw new Error(r.error ?? "transaction failed with no result");
15
+ }
16
+ return {
17
+ result: Cl.deserialize(r.result),
18
+ events: parseEvents(r.events),
19
+ costs: parseCosts(r.costs),
20
+ performance: undefined,
21
+ };
22
+ }
23
+ /** Call syncSend and throw if the server responded with an error. */
24
+ function send(request) {
25
+ const raw = syncSend(request);
26
+ const resp = JSON.parse(raw);
27
+ if (resp.error)
28
+ throw new Error(resp.error);
29
+ return resp.result ?? {};
30
+ }
31
+ /** Serialize a ClarityValue to a Clarity syntax string for use in snippets. */
32
+ function argString(v) {
33
+ return Cl.stringify(v);
34
+ }
35
+ /**
36
+ * Create a synchronous debug simnet proxy connected to the debug server at the
37
+ * given port. The caller must have already called `connectSyncSocket(port)`.
38
+ *
39
+ * `deployer` is fetched immediately (synchronously) from the server.
40
+ */
41
+ export function createSyncDebugSimnet() {
42
+ // Fetch deployer and accounts at construction time (sync, server is connected).
43
+ const initData = send({ method: "getAccounts" });
44
+ const accountsRecord = initData.accounts ?? {};
45
+ const deployer = accountsRecord["deployer"] ?? "";
46
+ return {
47
+ deployer,
48
+ get blockHeight() {
49
+ const resp = send({ method: "getBlockHeight" });
50
+ return resp.blockHeight;
51
+ },
52
+ get burnBlockHeight() {
53
+ const resp = send({ method: "getBurnBlockHeight" });
54
+ return resp.burnBlockHeight;
55
+ },
56
+ get stacksBlockHeight() {
57
+ const resp = send({ method: "getBlockHeight" });
58
+ return resp.blockHeight;
59
+ },
60
+ getAccounts() {
61
+ return new Map(Object.entries(accountsRecord));
62
+ },
63
+ mineEmptyBlock(count = 1) {
64
+ const resp = send({ method: "mineEmptyBlock", count });
65
+ return resp.blockHeight;
66
+ },
67
+ mineEmptyStacksBlock() {
68
+ const resp = send({ method: "mineEmptyBlock", count: 1 });
69
+ return resp.blockHeight;
70
+ },
71
+ setCurrentTestName(_name) {
72
+ // No-op in debug mode: coverage tracking is not supported.
73
+ },
74
+ collectReport(_includeBootContracts, _bootContractsPath) {
75
+ // Debug mode does not support coverage/cost reports.
76
+ throw new Error("collectReport: coverage and cost reports are not supported in debug mode");
77
+ },
78
+ runSnippet(snippet) {
79
+ const resp = send({ method: "execute", snippet });
80
+ return Cl.stringify(Cl.deserialize(resp.result));
81
+ },
82
+ mineBlock(txs) {
83
+ const serialized = txs.map((tx) => {
84
+ if (tx.callPublicFn) {
85
+ return {
86
+ type: "callPublicFn",
87
+ contract: tx.callPublicFn.contract,
88
+ function: tx.callPublicFn.method,
89
+ args: tx.callPublicFn.args.map(argString),
90
+ sender: tx.callPublicFn.sender,
91
+ };
92
+ }
93
+ if (tx.callPrivateFn) {
94
+ return {
95
+ type: "callPrivateFn",
96
+ contract: tx.callPrivateFn.contract,
97
+ function: tx.callPrivateFn.method,
98
+ args: tx.callPrivateFn.args.map(argString),
99
+ sender: tx.callPrivateFn.sender,
100
+ };
101
+ }
102
+ if (tx.deployContract) {
103
+ return {
104
+ type: "deployContract",
105
+ name: tx.deployContract.name,
106
+ content: tx.deployContract.content,
107
+ sender: tx.deployContract.sender,
108
+ };
109
+ }
110
+ if (tx.transferSTX) {
111
+ return {
112
+ type: "transferSTX",
113
+ amount: tx.transferSTX.amount,
114
+ recipient: tx.transferSTX.recipient,
115
+ sender: tx.transferSTX.sender,
116
+ };
117
+ }
118
+ return { type: "unknown" };
119
+ });
120
+ const resp = send({ method: "mineBlock", txs: serialized });
121
+ return (resp.results ?? []).map(parseTxResult);
122
+ },
123
+ callPublicFn(contract, method, args, sender) {
124
+ const resp = send({
125
+ method: "callPublicFn",
126
+ contract,
127
+ function: method,
128
+ args: args.map(argString),
129
+ sender,
130
+ });
131
+ return parseTxResult(resp);
132
+ },
133
+ callReadOnlyFn(contract, method, args, sender) {
134
+ const resp = send({
135
+ method: "callReadOnlyFn",
136
+ contract,
137
+ function: method,
138
+ args: args.map(argString),
139
+ sender,
140
+ });
141
+ return parseTxResult(resp);
142
+ },
143
+ callPrivateFn(contract, method, args, sender) {
144
+ const resp = send({
145
+ method: "callPrivateFn",
146
+ contract,
147
+ function: method,
148
+ args: args.map(argString),
149
+ sender,
150
+ });
151
+ return parseTxResult(resp);
152
+ },
153
+ execute(snippet) {
154
+ const resp = send({ method: "execute", snippet });
155
+ return parseTxResult(resp);
156
+ },
157
+ getAssetsMap() {
158
+ const resp = send({ method: "getAssetsMap" });
159
+ const outer = new Map();
160
+ for (const [asset, holders] of Object.entries(resp.assetsMap ?? {})) {
161
+ const inner = new Map();
162
+ for (const [addr, bal] of Object.entries(holders)) {
163
+ inner.set(addr, BigInt(bal));
164
+ }
165
+ outer.set(asset, inner);
166
+ }
167
+ return outer;
168
+ },
169
+ getLastContractCallTrace() {
170
+ return undefined;
171
+ },
172
+ async initSession(cwd, manifestPath, options) {
173
+ send({ method: "initSession", cwd, manifestPath, options });
174
+ },
175
+ };
176
+ }
177
+ //# sourceMappingURL=syncDebugSimnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncDebugSimnet.js","sourceRoot":"","sources":["../../../../src/syncDebugSimnet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Spawn the worker and wait for its TCP socket to connect.
3
+ * Must be called (and awaited) before any `syncSend` call.
4
+ */
5
+ export declare function connectSyncSocket(port: number): Promise<void>;
6
+ /**
7
+ * Send a JSON request to the debug server synchronously (blocks via Atomics.wait).
8
+ * Returns the raw JSON response string.
9
+ */
10
+ export declare function syncSend(request: Record<string, unknown>): string;
11
+ /** Terminate the worker and release the socket. */
12
+ export declare function closeSyncSocket(): void;
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Synchronous TCP socket client using Worker threads + SharedArrayBuffer +
3
+ * Atomics.wait. Allows the test runner's main thread to make blocking calls to
4
+ * the `clarinet dap` SDK server without async/await, so the existing synchronous
5
+ * Simnet API surface can be fulfilled by a remote debug session.
6
+ *
7
+ * Architecture (mirrors the sync_http.cjs pattern in clarinet-sdk-wasm):
8
+ * - Main thread writes a JSON request into the SAB, signals the worker, then
9
+ * blocks on Atomics.wait until the worker flips the signal back.
10
+ * - Worker thread holds a persistent TCP socket to the debug server. On each
11
+ * wakeup it reads the request, writes it to the socket, reads the newline-
12
+ * delimited JSON response, writes it back into the SAB and signals done.
13
+ */
14
+ import { Worker } from "node:worker_threads";
15
+ // SAB layout (all offsets in bytes, interpreted as Int32 unless noted):
16
+ // 0 signal 0 = idle (response ready), 1 = request pending
17
+ // 4 request_len byte length of the request in the data area
18
+ // 8 response_len byte length of response (negative = error message length)
19
+ // 12 liveness counter bumped by worker timer; main polls for liveness
20
+ // 64+ data area request bytes followed by response bytes (or error message)
21
+ const HEADER_BYTES = 64;
22
+ const OFFSET_SIGNAL = 0; // Int32 index 0
23
+ const OFFSET_REQ_LEN = 1; // Int32 index 1
24
+ const OFFSET_RESP_LEN = 2; // Int32 index 2
25
+ const OFFSET_LIVENESS = 3; // Int32 index 3
26
+ const SIGNAL_IDLE = 0;
27
+ const SIGNAL_PENDING = 1;
28
+ const LIVENESS_INTERVAL_MS = 250;
29
+ const WORKER_HEARTBEAT_MS = 1000;
30
+ const MAX_STALE_HEARTBEATS = 15;
31
+ const DEFAULT_SAB_SIZE = 4 * 1024 * 1024; // 4 MB
32
+ // ---------------------------------------------------------------------------
33
+ // Worker implementation – serialized and spawned with eval:true so this file
34
+ // stays self-contained. No TypeScript types inside: they get stripped by tsc
35
+ // and the string is valid JS. All data comes through workerData.
36
+ // ---------------------------------------------------------------------------
37
+ function debugSocketWorkerMain() {
38
+ /* eslint-disable */
39
+ const { workerData, parentPort } = require("node:worker_threads");
40
+ const net = require("node:net");
41
+ const { sab, port, headerBytes, signalIdle, signalPending, livenessIntervalMs, offsetSignal, offsetReqLen, offsetRespLen, offsetLiveness, } = workerData;
42
+ const dataCapacity = sab.byteLength - headerBytes;
43
+ const signal = new Int32Array(sab, 0, 1);
44
+ const header = new Int32Array(sab, 0, headerBytes / 4);
45
+ const data = new Uint8Array(sab, headerBytes, dataCapacity);
46
+ const encoder = new TextEncoder();
47
+ const decoder = new TextDecoder();
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ let pendingResolve = null;
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ let pendingReject = null;
52
+ let recvBuf = "";
53
+ const socket = net.createConnection({ port, host: "127.0.0.1" });
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ socket.on("data", (chunk) => {
56
+ recvBuf += chunk.toString("utf8");
57
+ const lines = recvBuf.split("\n");
58
+ recvBuf = lines.pop() ?? "";
59
+ for (const line of lines) {
60
+ const trimmed = line.trim();
61
+ if (trimmed && pendingResolve) {
62
+ const res = pendingResolve;
63
+ pendingResolve = null;
64
+ pendingReject = null;
65
+ res(trimmed);
66
+ break;
67
+ }
68
+ }
69
+ });
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ socket.on("error", (err) => {
72
+ if (pendingReject) {
73
+ const rej = pendingReject;
74
+ pendingResolve = null;
75
+ pendingReject = null;
76
+ rej(err);
77
+ }
78
+ });
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ function writeResponse(jsonStr) {
81
+ const bytes = encoder.encode(jsonStr);
82
+ if (bytes.length > dataCapacity) {
83
+ const msg = encoder.encode("response too large: " + bytes.length);
84
+ data.set(msg);
85
+ Atomics.store(header, offsetRespLen, -msg.length);
86
+ }
87
+ else {
88
+ data.set(bytes);
89
+ Atomics.store(header, offsetRespLen, bytes.length);
90
+ }
91
+ Atomics.store(signal, offsetSignal, signalIdle);
92
+ Atomics.notify(signal, offsetSignal, 1);
93
+ }
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ function writeError(msg) {
96
+ const bytes = encoder.encode(String(msg));
97
+ const truncated = bytes.subarray(0, Math.min(bytes.length, dataCapacity));
98
+ data.set(truncated);
99
+ Atomics.store(header, offsetRespLen, -truncated.length);
100
+ Atomics.store(signal, offsetSignal, signalIdle);
101
+ Atomics.notify(signal, offsetSignal, 1);
102
+ }
103
+ // Liveness beacon so the main thread can detect a dead worker.
104
+ setInterval(() => {
105
+ Atomics.add(header, offsetLiveness, 1);
106
+ }, livenessIntervalMs).unref();
107
+ process.on("unhandledRejection", (err) => writeError("unhandledRejection: " + err));
108
+ process.on("uncaughtException", (err) => writeError("uncaughtException: " + err));
109
+ (async () => {
110
+ // Wait for socket to connect before signalling ready.
111
+ await new Promise((resolve, reject) => {
112
+ socket.once("connect", resolve);
113
+ socket.once("error", reject);
114
+ });
115
+ parentPort.postMessage("ready");
116
+ for (;;) {
117
+ // Block until the main thread signals a pending request.
118
+ while (Atomics.load(signal, offsetSignal) !== signalPending) {
119
+ Atomics.wait(signal, offsetSignal, signalIdle);
120
+ }
121
+ // Yield to let queued microtasks (e.g. orphaned rejections) drain first.
122
+ await new Promise((r) => setImmediate(r));
123
+ const reqLen = Atomics.load(header, offsetReqLen);
124
+ const requestStr = decoder.decode(data.subarray(0, reqLen));
125
+ try {
126
+ const responseStr = await new Promise((resolve, reject) => {
127
+ const timer = setTimeout(() => {
128
+ pendingResolve = null;
129
+ pendingReject = null;
130
+ reject(new Error("debug server request timed out"));
131
+ }, 30_000);
132
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
133
+ pendingResolve = (result) => {
134
+ clearTimeout(timer);
135
+ resolve(result);
136
+ };
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
+ pendingReject = (err) => {
139
+ clearTimeout(timer);
140
+ reject(err);
141
+ };
142
+ socket.write(requestStr + "\n");
143
+ });
144
+ writeResponse(responseStr);
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ }
147
+ catch (e) {
148
+ writeError(e && e.message ? e.message : String(e));
149
+ }
150
+ }
151
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
+ })().catch((err) => {
153
+ // Connection failed during startup; signal main thread.
154
+ writeError("worker startup failed: " + (err && err.message ? err.message : String(err)));
155
+ process.exit(1);
156
+ });
157
+ /* eslint-enable */
158
+ }
159
+ const WORKER_SOURCE = `(${debugSocketWorkerMain.toString()})()`;
160
+ let state = null;
161
+ const encoder = new TextEncoder();
162
+ const decoder = new TextDecoder();
163
+ const DATA_CAPACITY = DEFAULT_SAB_SIZE - HEADER_BYTES;
164
+ /**
165
+ * Spawn the worker and wait for its TCP socket to connect.
166
+ * Must be called (and awaited) before any `syncSend` call.
167
+ */
168
+ export async function connectSyncSocket(port) {
169
+ if (state && !state.dead)
170
+ return;
171
+ const sab = new SharedArrayBuffer(DEFAULT_SAB_SIZE);
172
+ const signal = new Int32Array(sab, 0, 1);
173
+ const header = new Int32Array(sab, 0, HEADER_BYTES / 4);
174
+ const data = new Uint8Array(sab, HEADER_BYTES, DATA_CAPACITY);
175
+ const worker = new Worker(WORKER_SOURCE, {
176
+ eval: true,
177
+ workerData: {
178
+ sab,
179
+ port,
180
+ headerBytes: HEADER_BYTES,
181
+ signalIdle: SIGNAL_IDLE,
182
+ signalPending: SIGNAL_PENDING,
183
+ livenessIntervalMs: LIVENESS_INTERVAL_MS,
184
+ offsetSignal: OFFSET_SIGNAL,
185
+ offsetReqLen: OFFSET_REQ_LEN,
186
+ offsetRespLen: OFFSET_RESP_LEN,
187
+ offsetLiveness: OFFSET_LIVENESS,
188
+ },
189
+ });
190
+ worker.unref();
191
+ const s = { worker, header, signal, data, dead: false, cause: null };
192
+ worker.on("error", (err) => {
193
+ s.dead = true;
194
+ s.cause = err instanceof Error ? err : new Error(String(err));
195
+ });
196
+ worker.on("exit", (code) => {
197
+ s.dead = true;
198
+ if (!s.cause && code !== 0)
199
+ s.cause = new Error(`debug socket worker exited with code ${code}`);
200
+ });
201
+ state = s;
202
+ // Wait for the worker to signal "ready" (TCP socket connected).
203
+ await new Promise((resolve, reject) => {
204
+ const timeout = setTimeout(() => reject(new Error("debug socket worker did not become ready within 15 s")), 15_000);
205
+ worker.once("message", (msg) => {
206
+ clearTimeout(timeout);
207
+ if (msg === "ready")
208
+ resolve();
209
+ else
210
+ reject(new Error(`unexpected worker message: ${msg}`));
211
+ });
212
+ worker.once("error", (err) => {
213
+ clearTimeout(timeout);
214
+ reject(err);
215
+ });
216
+ });
217
+ }
218
+ /**
219
+ * Send a JSON request to the debug server synchronously (blocks via Atomics.wait).
220
+ * Returns the raw JSON response string.
221
+ */
222
+ export function syncSend(request) {
223
+ if (!state || state.dead) {
224
+ throw new Error("debug socket not connected" + (state?.cause ? `: ${state.cause.message}` : ""));
225
+ }
226
+ const reqBytes = encoder.encode(JSON.stringify(request));
227
+ if (reqBytes.length > DATA_CAPACITY) {
228
+ throw new Error(`debug request too large: ${reqBytes.length} bytes`);
229
+ }
230
+ state.data.set(reqBytes);
231
+ Atomics.store(state.header, OFFSET_REQ_LEN, reqBytes.length);
232
+ Atomics.store(state.signal, OFFSET_SIGNAL, SIGNAL_PENDING);
233
+ Atomics.notify(state.signal, OFFSET_SIGNAL, 1);
234
+ // Block until the worker finishes, with liveness heartbeating.
235
+ let lastBeat = Atomics.load(state.header, OFFSET_LIVENESS);
236
+ let stale = 0;
237
+ for (;;) {
238
+ const r = Atomics.wait(state.signal, OFFSET_SIGNAL, SIGNAL_PENDING, WORKER_HEARTBEAT_MS);
239
+ if (r === "not-equal" || r === "ok")
240
+ break;
241
+ const beat = Atomics.load(state.header, OFFSET_LIVENESS);
242
+ if (beat !== lastBeat) {
243
+ lastBeat = beat;
244
+ stale = 0;
245
+ continue;
246
+ }
247
+ stale++;
248
+ if (stale >= MAX_STALE_HEARTBEATS) {
249
+ state.dead = true;
250
+ if (!state.cause) {
251
+ state.cause = new Error(`debug socket worker unresponsive for ${stale * WORKER_HEARTBEAT_MS} ms`);
252
+ }
253
+ break;
254
+ }
255
+ }
256
+ if (state.dead) {
257
+ throw new Error("debug socket worker died during request: " + (state.cause?.message ?? "unknown"));
258
+ }
259
+ const respLen = Atomics.load(state.header, OFFSET_RESP_LEN);
260
+ if (respLen < 0) {
261
+ throw new Error(decoder.decode(state.data.subarray(0, -respLen)));
262
+ }
263
+ return decoder.decode(state.data.subarray(0, respLen));
264
+ }
265
+ /** Terminate the worker and release the socket. */
266
+ export function closeSyncSocket() {
267
+ const w = state?.worker;
268
+ state = null;
269
+ try {
270
+ w?.terminate();
271
+ }
272
+ catch {
273
+ // ignore
274
+ }
275
+ }
276
+ //# sourceMappingURL=syncDebugSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncDebugSocket.js","sourceRoot":"","sources":["../../../../src/syncDebugSocket.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export declare function vfs(action: string, data: unknown): Promise<boolean> | Promise<string> | Promise<{
1
+ export declare function vfs(action: string, data: unknown): Promise<void> | Promise<string> | Promise<{
2
2
  [k: string]: string;
3
- }> | Promise<void>;
3
+ }> | Promise<boolean>;
@@ -1,31 +1,31 @@
1
- export declare function getClarinetVitestsArgv(): {
1
+ export declare function getClarinetVitestsArgv(): Promise<{
2
2
  [x: string]: unknown;
3
- "manifest-path": string;
4
- manifestPath: string;
5
- "init-before-each": boolean;
6
- initBeforeEach: boolean;
7
- coverage: boolean;
3
+ $0: string;
4
+ _: (string | number)[];
8
5
  costs: boolean;
9
- "coverage-filename": string;
10
- coverageFilename: string;
11
6
  "costs-filename": string;
12
7
  costsFilename: string;
13
- _: (string | number)[];
14
- $0: string;
15
- } | Promise<{
16
- [x: string]: unknown;
17
- "manifest-path": string;
18
- manifestPath: string;
19
- "init-before-each": boolean;
20
- initBeforeEach: boolean;
21
8
  coverage: boolean;
22
- costs: boolean;
23
9
  "coverage-filename": string;
24
10
  coverageFilename: string;
11
+ "init-before-each": boolean;
12
+ initBeforeEach: boolean;
13
+ "manifest-path": string;
14
+ manifestPath: string;
15
+ }> | {
16
+ [x: string]: unknown;
17
+ $0: string;
18
+ _: (string | number)[];
19
+ costs: boolean;
25
20
  "costs-filename": string;
26
21
  costsFilename: string;
27
- _: (string | number)[];
28
- $0: string;
29
- }>;
22
+ coverage: boolean;
23
+ "coverage-filename": string;
24
+ coverageFilename: string;
25
+ "init-before-each": boolean;
26
+ initBeforeEach: boolean;
27
+ "manifest-path": string;
28
+ manifestPath: string;
29
+ };
30
30
  export declare const vitestHelpersPath: string;
31
31
  export declare const vitestSetupFilePath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/vitest/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAElC,aAAa;IACb,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrB,MAAM,CAAC,eAAe,EAAE;QACvB,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,iBAAiB;KAC3B,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,WAAW,EAAE,kDAAkD;QAC/D,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE;QAC3B,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;KACrB,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC,IAAI,CAAC;AACZ,CAAC;AAED,0DAA0D;AAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/vitest/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAElC,aAAa;IACb,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrB,MAAM,CAAC,eAAe,EAAE;QACvB,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,iBAAiB;KAC3B,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,WAAW,EAAE,kDAAkD;QAC/D,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,mBAAmB,EAAE;QAC3B,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;KACrB,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC,IAAI,CAAC;AACZ,CAAC;AAED,0DAA0D;AAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhE,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC"}