supercov 0.0.2 → 0.0.3

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -20
  3. package/bin/supercov.js +10 -0
  4. package/dist/atomic.d.ts +6 -0
  5. package/dist/atomic.d.ts.map +1 -0
  6. package/dist/atomic.js +47 -0
  7. package/dist/atomic.js.map +1 -0
  8. package/dist/cli.js +431 -214
  9. package/dist/cli.js.map +1 -1
  10. package/dist/directInstrumenter.d.ts +8 -0
  11. package/dist/directInstrumenter.d.ts.map +1 -0
  12. package/dist/directInstrumenter.js +70 -0
  13. package/dist/directInstrumenter.js.map +1 -0
  14. package/dist/instrumenter.d.ts.map +1 -1
  15. package/dist/instrumenter.js +251 -41
  16. package/dist/instrumenter.js.map +1 -1
  17. package/dist/integrity.d.ts.map +1 -1
  18. package/dist/integrity.js +27 -0
  19. package/dist/integrity.js.map +1 -1
  20. package/dist/launchSupervisor.d.ts +24 -0
  21. package/dist/launchSupervisor.d.ts.map +1 -0
  22. package/dist/launchSupervisor.js +397 -0
  23. package/dist/launchSupervisor.js.map +1 -0
  24. package/dist/playwright.d.ts +0 -4
  25. package/dist/playwright.d.ts.map +1 -1
  26. package/dist/playwright.js +33 -17
  27. package/dist/playwright.js.map +1 -1
  28. package/dist/playwrightReporter.d.ts.map +1 -1
  29. package/dist/playwrightReporter.js +3 -2
  30. package/dist/playwrightReporter.js.map +1 -1
  31. package/dist/project.d.ts +5 -2
  32. package/dist/project.d.ts.map +1 -1
  33. package/dist/project.js +192 -27
  34. package/dist/project.js.map +1 -1
  35. package/dist/query.d.ts.map +1 -1
  36. package/dist/query.js +1 -0
  37. package/dist/query.js.map +1 -1
  38. package/dist/register.mjs +18 -13
  39. package/dist/register.mjs.map +1 -1
  40. package/dist/reporter.d.ts +4 -1
  41. package/dist/reporter.d.ts.map +1 -1
  42. package/dist/reporter.js +13 -11
  43. package/dist/reporter.js.map +1 -1
  44. package/dist/resolve-loader.d.mts.map +1 -1
  45. package/dist/resolve-loader.mjs +11 -3
  46. package/dist/resolve-loader.mjs.map +1 -1
  47. package/dist/runtime.d.ts +2 -2
  48. package/dist/runtime.d.ts.map +1 -1
  49. package/dist/runtime.js +35 -7
  50. package/dist/runtime.js.map +1 -1
  51. package/dist/transport.d.ts +2 -0
  52. package/dist/transport.d.ts.map +1 -1
  53. package/dist/transport.js +2 -0
  54. package/dist/transport.js.map +1 -1
  55. package/dist/types.d.ts +2 -1
  56. package/dist/types.d.ts.map +1 -1
  57. package/dist/vitePlugin.d.ts.map +1 -1
  58. package/dist/vitePlugin.js +4 -3
  59. package/dist/vitePlugin.js.map +1 -1
  60. package/dist/vitest.js +3 -2
  61. package/dist/vitest.js.map +1 -1
  62. package/dist/vitestReporter.d.ts +17 -2
  63. package/dist/vitestReporter.d.ts.map +1 -1
  64. package/dist/vitestReporter.js +51 -2
  65. package/dist/vitestReporter.js.map +1 -1
  66. package/dist/workspace.d.ts +46 -0
  67. package/dist/workspace.d.ts.map +1 -0
  68. package/dist/workspace.js +284 -0
  69. package/dist/workspace.js.map +1 -0
  70. package/package.json +19 -5
@@ -0,0 +1,397 @@
1
+ import childProcess from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { appendFileSync, mkdirSync } from "node:fs";
4
+ import Module, { syncBuiltinESMExports } from "node:module";
5
+ import { dirname, isAbsolute, relative, resolve } from "node:path";
6
+ import { pathToFileURL } from "node:url";
7
+ const HOST_PATH_KEYS = ["hostPath", "source", "src", "localPath"];
8
+ const GUEST_PATH_KEYS = [
9
+ "guestPath",
10
+ "target",
11
+ "destination",
12
+ "containerPath",
13
+ ];
14
+ const CACHE_IDENTITY = /^(?:warmup|snapshot|cache)(?:key|tag|id)$/i;
15
+ const patchedBuilders = new WeakSet();
16
+ const exportedValues = new WeakSet();
17
+ const capabilityProxies = new WeakMap();
18
+ let installed = false;
19
+ let remoteLaunchSequence = 0;
20
+ function executionLogPath(path) {
21
+ const shard = (process.env["SUPERCOV_EXECUTION_LOG_SHARD"] ?? "host").replace(/[^A-Za-z0-9_.-]/g, "_");
22
+ const suffix = `.${shard}.${process.pid}.jsonl`;
23
+ return path.endsWith(".jsonl")
24
+ ? `${path.slice(0, -".jsonl".length)}${suffix}`
25
+ : `${path}${suffix}`;
26
+ }
27
+ function record(value) {
28
+ const configuredPath = process.env["SUPERCOV_EXECUTION_LOG"];
29
+ if (!configuredPath)
30
+ return;
31
+ const path = executionLogPath(configuredPath);
32
+ try {
33
+ mkdirSync(dirname(path), { recursive: true });
34
+ appendFileSync(path, `${JSON.stringify({
35
+ at: new Date().toISOString(),
36
+ pid: process.pid,
37
+ ppid: process.ppid,
38
+ ...value,
39
+ })}\n`);
40
+ }
41
+ catch {
42
+ // Process tracing is diagnostic and must never change test behavior.
43
+ }
44
+ }
45
+ function safeArgument(value) {
46
+ if (value.length <= 160 && !value.includes("\n") && !value.includes("\r"))
47
+ return value;
48
+ return {
49
+ bytes: Buffer.byteLength(value),
50
+ sha256: createHash("sha256").update(value).digest("hex"),
51
+ };
52
+ }
53
+ function commandSummary(argv) {
54
+ return {
55
+ executable: argv[0] ? safeArgument(argv[0]) : undefined,
56
+ arguments: argv.slice(1, 9).map(safeArgument),
57
+ argumentCount: Math.max(0, argv.length - 1),
58
+ };
59
+ }
60
+ function stringProperty(value, keys) {
61
+ for (const key of keys) {
62
+ const candidate = value[key];
63
+ if (typeof candidate === "string" && candidate.length > 0)
64
+ return candidate;
65
+ }
66
+ return undefined;
67
+ }
68
+ function containsPath(parent, child) {
69
+ const local = relative(resolve(parent), resolve(child));
70
+ if (local === "")
71
+ return "";
72
+ if (local.startsWith("..") || isAbsolute(local))
73
+ return undefined;
74
+ return local;
75
+ }
76
+ /**
77
+ * Find a host-to-guest mount that makes the isolated project visible to a
78
+ * remote executor. This deliberately recognizes data shape, not a provider or
79
+ * package name.
80
+ */
81
+ export function discoverWorkspaceMapping(value, hostRoot, depth = 0) {
82
+ if (!value || typeof value !== "object" || depth > 5)
83
+ return undefined;
84
+ if (Array.isArray(value)) {
85
+ for (const item of value.slice(0, 200)) {
86
+ const mapping = discoverWorkspaceMapping(item, hostRoot, depth + 1);
87
+ if (mapping)
88
+ return mapping;
89
+ }
90
+ return undefined;
91
+ }
92
+ const candidate = value;
93
+ const hostPath = stringProperty(candidate, HOST_PATH_KEYS);
94
+ const guestPath = stringProperty(candidate, GUEST_PATH_KEYS);
95
+ if (hostPath && guestPath) {
96
+ const local = containsPath(hostPath, hostRoot);
97
+ if (local !== undefined) {
98
+ return {
99
+ hostRoot: resolve(hostRoot),
100
+ guestRoot: local ? resolve(guestPath, local) : resolve(guestPath),
101
+ };
102
+ }
103
+ }
104
+ for (const nested of Object.values(candidate).slice(0, 200)) {
105
+ const mapping = discoverWorkspaceMapping(nested, hostRoot, depth + 1);
106
+ if (mapping)
107
+ return mapping;
108
+ }
109
+ return undefined;
110
+ }
111
+ function scopeCacheValue(value, fingerprint) {
112
+ const suffix = `supercov-${fingerprint.slice(0, 20)}`;
113
+ return value.includes(suffix) ? value : `${value}-${suffix}`;
114
+ }
115
+ /** Clone only branches that contain a recognized cache/snapshot identity. */
116
+ export function scopeCapabilityCache(value, fingerprint, depth = 0) {
117
+ if (!value || typeof value !== "object" || depth > 5)
118
+ return { value, changed: [] };
119
+ if (Array.isArray(value)) {
120
+ const changed = [];
121
+ let cloned;
122
+ for (let index = 0; index < value.length; index += 1) {
123
+ const nested = scopeCapabilityCache(value[index], fingerprint, depth + 1);
124
+ if (nested.changed.length > 0) {
125
+ cloned ??= [...value];
126
+ cloned[index] = nested.value;
127
+ changed.push(...nested.changed.map((path) => `[${index}]${path}`));
128
+ }
129
+ }
130
+ return { value: cloned ?? value, changed };
131
+ }
132
+ const source = value;
133
+ let clone;
134
+ const changed = [];
135
+ for (const key of Reflect.ownKeys(source)) {
136
+ if (typeof key !== "string")
137
+ continue;
138
+ const nestedValue = source[key];
139
+ if (CACHE_IDENTITY.test(key) && typeof nestedValue === "string") {
140
+ clone ??= { ...source };
141
+ clone[key] = scopeCacheValue(nestedValue, fingerprint);
142
+ changed.push(key);
143
+ continue;
144
+ }
145
+ const nested = scopeCapabilityCache(nestedValue, fingerprint, depth + 1);
146
+ if (nested.changed.length > 0) {
147
+ clone ??= { ...source };
148
+ clone[key] = nested.value;
149
+ changed.push(...nested.changed.map((path) => `${key}.${path}`));
150
+ }
151
+ }
152
+ return { value: clone ?? value, changed };
153
+ }
154
+ function replaceRoot(value, mapping) {
155
+ const hostRoot = mapping.hostRoot.replaceAll("\\", "/").replace(/\/$/, "");
156
+ const guestRoot = mapping.guestRoot.replaceAll("\\", "/").replace(/\/$/, "");
157
+ const normalized = value.replaceAll("\\", "/");
158
+ const hostUrl = pathToFileURL(mapping.hostRoot).href.replace(/\/$/, "");
159
+ const guestUrl = pathToFileURL(mapping.guestRoot).href.replace(/\/$/, "");
160
+ if (normalized === hostRoot)
161
+ return guestRoot;
162
+ if (normalized.startsWith(`${hostRoot}/`))
163
+ return `${guestRoot}/${normalized.slice(hostRoot.length + 1)}`;
164
+ if (value === hostUrl)
165
+ return guestUrl;
166
+ if (value.startsWith(`${hostUrl}/`))
167
+ return `${guestUrl}/${value.slice(hostUrl.length + 1)}`;
168
+ return value;
169
+ }
170
+ function appendNodeImport(existing, registerUrl) {
171
+ const addition = `--import=${registerUrl}`;
172
+ if (existing?.includes(addition))
173
+ return existing;
174
+ return [existing, addition].filter(Boolean).join(" ");
175
+ }
176
+ function coverageVariables(environment) {
177
+ return Object.fromEntries(Object.entries(environment).filter(([key, value]) => key.startsWith("SUPERCOV_") && value !== undefined));
178
+ }
179
+ /** Build an environment whose paths remain valid inside the discovered VM. */
180
+ export function guestCoverageEnvironment(mapping, coverageEnvironment = process.env, existingEnvironment = {}) {
181
+ const translated = Object.fromEntries(Object.entries(coverageVariables(coverageEnvironment)).map(([key, value]) => [
182
+ key,
183
+ value === undefined ? value : replaceRoot(value, mapping),
184
+ ]));
185
+ const registerUrl = pathToFileURL(resolve(mapping.guestRoot, ".supercov/register.mjs")).href;
186
+ return {
187
+ ...existingEnvironment,
188
+ ...translated,
189
+ SUPERCOV_PROJECT_ROOT: mapping.guestRoot,
190
+ SUPERCOV_CJS_INTERCEPT: "1",
191
+ NODE_OPTIONS: appendNodeImport(existingEnvironment.NODE_OPTIONS, registerUrl),
192
+ };
193
+ }
194
+ function launchOptions(value) {
195
+ if (!value || typeof value !== "object" || Array.isArray(value))
196
+ return false;
197
+ const candidate = value;
198
+ return ((Array.isArray(candidate.argv) &&
199
+ candidate.argv.every((item) => typeof item === "string")) ||
200
+ (Array.isArray(candidate.cmd) &&
201
+ candidate.cmd.every((item) => typeof item === "string")) ||
202
+ typeof candidate.command === "string");
203
+ }
204
+ function launchArgv(value) {
205
+ if (Array.isArray(value.argv))
206
+ return value.argv;
207
+ if (Array.isArray(value.cmd))
208
+ return value.cmd;
209
+ return [String(value.command)];
210
+ }
211
+ function injectRemoteLaunch(options, mapping) {
212
+ const environmentKey = "environment" in options && !("env" in options) ? "environment" : "env";
213
+ const existing = options[environmentKey];
214
+ return {
215
+ ...options,
216
+ [environmentKey]: guestCoverageEnvironment(mapping, {
217
+ ...process.env,
218
+ SUPERCOV_EXECUTION_LOG_SHARD: `${process.pid}-${++remoteLaunchSequence}`,
219
+ }, existing && typeof existing === "object"
220
+ ? existing
221
+ : {}),
222
+ };
223
+ }
224
+ function wrapResult(value, mapping) {
225
+ if (value instanceof Promise)
226
+ return value.then((result) => wrapCapabilityObject(result, mapping));
227
+ return wrapCapabilityObject(value, mapping);
228
+ }
229
+ /**
230
+ * Follow an opaque image/pool/machine-style object graph. Any method accepting
231
+ * an argv-shaped options object receives the translated Supercov environment.
232
+ */
233
+ export function wrapCapabilityObject(value, mapping) {
234
+ if ((!value || typeof value !== "object") && typeof value !== "function")
235
+ return value;
236
+ const object = value;
237
+ const cached = capabilityProxies.get(object);
238
+ if (cached)
239
+ return cached;
240
+ const proxy = new Proxy(object, {
241
+ get(target, property) {
242
+ // Use the real target as the receiver so SDK getters backed by private
243
+ // fields keep their brand check. Method calls are likewise bound below.
244
+ const member = Reflect.get(target, property, target);
245
+ if (typeof member !== "function")
246
+ return member;
247
+ return (...args) => {
248
+ let callArguments = args;
249
+ const index = args.findIndex(launchOptions);
250
+ if (index >= 0) {
251
+ const original = args[index];
252
+ callArguments = [...args];
253
+ callArguments[index] = injectRemoteLaunch(original, mapping);
254
+ record({
255
+ event: "remote-launch",
256
+ command: commandSummary(launchArgv(original)),
257
+ guestRoot: mapping.guestRoot,
258
+ });
259
+ }
260
+ return wrapResult(Reflect.apply(member, target, callArguments), mapping);
261
+ };
262
+ },
263
+ });
264
+ capabilityProxies.set(object, proxy);
265
+ return proxy;
266
+ }
267
+ function patchBuilder(builder) {
268
+ if (patchedBuilders.has(builder))
269
+ return;
270
+ const descriptor = Object.getOwnPropertyDescriptor(builder, "build");
271
+ if (!descriptor || typeof descriptor.value !== "function" || !descriptor.writable)
272
+ return;
273
+ const original = descriptor.value;
274
+ Object.defineProperty(builder, "build", {
275
+ ...descriptor,
276
+ value: function supercovCapabilityBuild(...args) {
277
+ const hostRoot = process.env["SUPERCOV_PROJECT_ROOT"];
278
+ const mapping = hostRoot
279
+ ? discoverWorkspaceMapping(args[0], hostRoot)
280
+ : undefined;
281
+ if (!mapping)
282
+ return Reflect.apply(original, this, args);
283
+ const fingerprint = process.env["SUPERCOV_EXECUTION_FINGERPRINT"] ?? "unversioned";
284
+ const scoped = scopeCapabilityCache(args[0], fingerprint);
285
+ const callArguments = [scoped.value, ...args.slice(1)];
286
+ record({
287
+ event: "workspace-capability",
288
+ hostRoot: mapping.hostRoot,
289
+ guestRoot: mapping.guestRoot,
290
+ cacheIdentities: scoped.changed,
291
+ });
292
+ return wrapResult(Reflect.apply(original, this, callArguments), mapping);
293
+ },
294
+ });
295
+ patchedBuilders.add(builder);
296
+ }
297
+ function inspectExports(value, depth = 0) {
298
+ if (((!value || typeof value !== "object") && typeof value !== "function") ||
299
+ depth > 2)
300
+ return;
301
+ const object = value;
302
+ if (exportedValues.has(object))
303
+ return;
304
+ exportedValues.add(object);
305
+ if (typeof value === "function")
306
+ patchBuilder(value);
307
+ for (const key of Reflect.ownKeys(object).slice(0, 200)) {
308
+ if (key === "prototype" || key === "caller" || key === "callee")
309
+ continue;
310
+ try {
311
+ const descriptor = Object.getOwnPropertyDescriptor(object, key);
312
+ if (descriptor && "value" in descriptor)
313
+ inspectExports(descriptor.value, depth + 1);
314
+ }
315
+ catch {
316
+ // Export inspection is best-effort and never invokes accessors.
317
+ }
318
+ }
319
+ }
320
+ function childOptionsIndex(method, args) {
321
+ if (method === "spawn" || method === "spawnSync" || method === "fork")
322
+ return Array.isArray(args[1]) ? 2 : 1;
323
+ if (method === "exec" ||
324
+ method === "execSync" ||
325
+ method === "execFile" ||
326
+ method === "execFileSync")
327
+ return Array.isArray(args[1]) ? 2 : 1;
328
+ return undefined;
329
+ }
330
+ function injectChildEnvironment(method, args) {
331
+ const index = childOptionsIndex(method, args);
332
+ if (index === undefined)
333
+ return args;
334
+ const next = [...args];
335
+ const original = next[index];
336
+ const options = original && typeof original === "object" && !Array.isArray(original)
337
+ ? original
338
+ : {};
339
+ const inherited = coverageVariables(process.env);
340
+ const existingEnvironment = options.env && typeof options.env === "object"
341
+ ? options.env
342
+ : undefined;
343
+ const environment = existingEnvironment
344
+ ? { ...existingEnvironment, ...inherited }
345
+ : { ...process.env, ...inherited };
346
+ environment.NODE_OPTIONS = appendNodeImport(existingEnvironment?.NODE_OPTIONS ?? process.env.NODE_OPTIONS, pathToFileURL(resolve(process.env["SUPERCOV_PROJECT_ROOT"] ?? process.cwd(), ".supercov/register.mjs")).href);
347
+ next[index] = { ...options, env: environment };
348
+ if (typeof original === "function")
349
+ next.splice(index + 1, 0, original);
350
+ record({
351
+ event: "child-launch",
352
+ method,
353
+ command: safeArgument(String(args[0] ?? "")),
354
+ });
355
+ return next;
356
+ }
357
+ function patchChildProcesses() {
358
+ const methods = [
359
+ "spawn",
360
+ "spawnSync",
361
+ "exec",
362
+ "execSync",
363
+ "execFile",
364
+ "execFileSync",
365
+ "fork",
366
+ ];
367
+ for (const method of methods) {
368
+ const original = childProcess[method];
369
+ Object.defineProperty(childProcess, method, {
370
+ configurable: true,
371
+ enumerable: true,
372
+ writable: true,
373
+ value: (...args) => Reflect.apply(original, childProcess, injectChildEnvironment(method, args)),
374
+ });
375
+ }
376
+ syncBuiltinESMExports();
377
+ }
378
+ export function installLaunchSupervisor() {
379
+ if (installed)
380
+ return;
381
+ installed = true;
382
+ patchChildProcesses();
383
+ const moduleLoader = Module;
384
+ const originalLoad = moduleLoader._load;
385
+ moduleLoader._load = function supercovCapabilityLoad(request, parent, isMain) {
386
+ const exports = originalLoad.call(this, request, parent, isMain);
387
+ inspectExports(exports);
388
+ return exports;
389
+ };
390
+ record({
391
+ event: "process",
392
+ cwd: process.cwd(),
393
+ command: commandSummary(process.argv),
394
+ entrypoint: process.argv[1],
395
+ });
396
+ }
397
+ //# sourceMappingURL=launchSupervisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launchSupervisor.js","sourceRoot":"","sources":["../src/launchSupervisor.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,4 @@ export declare const expect: typeof baseExpect;
6
6
  export declare const test: TestType<PlaywrightTestArgs & Record<string, unknown> & {
7
7
  mcdcAutoCollect: void;
8
8
  }, PlaywrightWorkerArgs & Record<string, unknown>>;
9
- export declare const offlineTest: TestType<PlaywrightTestArgs & Record<string, unknown> & {
10
- mcdcAutoCollect: void;
11
- }, PlaywrightWorkerArgs & Record<string, unknown>>;
12
- export declare const WebhookBodiesContract: unknown;
13
9
  //# sourceMappingURL=playwright.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,kBAAkB,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAMV,kBAAkB,EAClB,oBAAoB,EAGpB,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAkB1B,cAAc,kBAAkB,CAAC;AAyBjC,QAAA,MAAM,UAAU,+BAAiB,CAAC;AA0sBlC,eAAO,MAAM,MAAM,EAEd,OAAO,UAAU,CAAC;AAmOvB,eAAO,MAAM,IAAI;qBAzKuC,IAAI;kDAyKxB,CAAC;AACrC,eAAO,MAAM,WAAW;qBA1KgC,IAAI;kDA0KjB,CAAC;AAC5C,eAAO,MAAM,qBAAqB,SAAgC,CAAC"}
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,kBAAkB,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAMV,kBAAkB,EAClB,oBAAoB,EAGpB,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAqB1B,cAAc,kBAAkB,CAAC;AA2BjC,QAAA,MAAM,UAAU,+BAAiB,CAAC;AAstBlC,eAAO,MAAM,MAAM,EAEd,OAAO,UAAU,CAAC;AAmOvB,eAAO,MAAM,IAAI;qBAzKuC,IAAI;kDAyKxB,CAAC"}
@@ -8,24 +8,28 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
8
8
  };
9
9
  import { createHash } from "node:crypto";
10
10
  import childProcess from "node:child_process";
11
- import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
11
+ import { mkdirSync, readFileSync, rmSync } from "node:fs";
12
12
  import http from "node:http";
13
13
  import https from "node:https";
14
14
  import { syncBuiltinESMExports } from "node:module";
15
15
  import { dirname, relative, resolve, sep } from "node:path";
16
16
  import * as standardPlaywright from "@playwright/test";
17
17
  import { inferTestProvenance } from "./provenance.js";
18
- import { COVERAGE_PHASE_HEADER, COVERAGE_SCOPE_HEADER, COVERAGE_CARRIER_ENV, encodeCoverageCarrier, encodeCoverageScope, serverEvidenceDirectory, serverEvidencePath, } from "./transport.js";
18
+ import { atomicWriteFileSync } from "./atomic.js";
19
+ import { COVERAGE_PHASE_HEADER, COVERAGE_PHASE_COOKIE, COVERAGE_SCOPE_COOKIE, COVERAGE_SCOPE_HEADER, COVERAGE_CARRIER_ENV, encodeCoverageCarrier, encodeCoverageScope, serverEvidenceDirectory, serverEvidencePath, } from "./transport.js";
19
20
  export * from "@playwright/test";
20
21
  const generatedTargetModule = "__SUPERCOV_PLAYWRIGHT_MODULE__";
21
22
  const targetModule = process.env["SUPERCOV_PLAYWRIGHT_MODULE"] ??
22
23
  (generatedTargetModule.startsWith("__")
23
24
  ? "@playwright/test"
24
25
  : generatedTargetModule);
26
+ const generatedTestExport = "__SUPERCOV_PLAYWRIGHT_TEST_EXPORT__";
27
+ const targetTestExport = process.env["SUPERCOV_PLAYWRIGHT_TEST_EXPORT"] ??
28
+ (generatedTestExport.startsWith("__") ? "test" : generatedTestExport);
25
29
  const adapter = (targetModule === "@playwright/test"
26
30
  ? standardPlaywright
27
31
  : await import(__rewriteRelativeImportExtension(targetModule)));
28
- const base = (adapter.offlineTest ?? adapter.test);
32
+ const base = (adapter[targetTestExport] ?? adapter.test);
29
33
  const baseExpect = adapter.expect;
30
34
  const GENERATED_EVIDENCE_DIRECTORY = "__SUPERCOV_EVIDENCE_DIRECTORY__";
31
35
  const GENERATED_RUN_ID = "__SUPERCOV_RUN_ID__";
@@ -66,8 +70,7 @@ function isApiRequestContext(value) {
66
70
  const candidate = value;
67
71
  return (typeof candidate["fetch"] === "function" &&
68
72
  typeof candidate["get"] === "function" &&
69
- typeof candidate["post"] === "function" &&
70
- typeof candidate["storageState"] === "function");
73
+ typeof candidate["post"] === "function");
71
74
  }
72
75
  function callerSource() {
73
76
  const stack = new Error().stack?.split("\n").slice(2) ?? [];
@@ -76,11 +79,15 @@ function callerSource() {
76
79
  !line.includes("node_modules"));
77
80
  if (!candidate)
78
81
  return undefined;
79
- return candidate
80
- .trim()
81
- .replace(/^at\s+/, "")
82
- .replace("file:///workspace/", "")
83
- .replace("/workspace/", "");
82
+ const normalized = candidate.trim().replace(/^at\s+/, "");
83
+ const projectRoot = process.env["SUPERCOV_PROJECT_ROOT"]
84
+ ?.replaceAll("\\", "/")
85
+ .replace(/\/$/, "");
86
+ if (!projectRoot)
87
+ return normalized;
88
+ return normalized
89
+ .replace(`file://${projectRoot}/`, "")
90
+ .replace(`${projectRoot}/`, "");
84
91
  }
85
92
  class CoveragePhaseController {
86
93
  scope;
@@ -134,9 +141,10 @@ class CoveragePhaseController {
134
141
  return;
135
142
  this.contexts.add(context);
136
143
  this.contextConfiguredHeaders.set(context, configuredHeaders);
137
- await context.addInitScript(({ attemptId, scopeHeader, scopeValue }) => {
144
+ await context.addInitScript(({ attemptId, scopeHeader, scopeValue, scopeCookie }) => {
138
145
  globalThis.__SUPERCOV_MCDC_TEST_ID__ = attemptId;
139
146
  try {
147
+ document.cookie = `${scopeCookie}=${encodeURIComponent(scopeValue)}; Path=/; SameSite=Lax`;
140
148
  const originalFetch = globalThis.fetch?.bind(globalThis);
141
149
  if (originalFetch) {
142
150
  globalThis.fetch = ((input, init) => {
@@ -157,6 +165,7 @@ class CoveragePhaseController {
157
165
  attemptId: this.scope.attemptId,
158
166
  scopeHeader: COVERAGE_SCOPE_HEADER,
159
167
  scopeValue: encodeCoverageScope(this.scope),
168
+ scopeCookie: COVERAGE_SCOPE_COOKIE,
160
169
  });
161
170
  const attachPhase = async (route) => {
162
171
  const phaseId = this.requestPhaseId();
@@ -373,15 +382,23 @@ class CoveragePhaseController {
373
382
  async activateInBrowser(phaseId) {
374
383
  await Promise.all([...this.contexts].map((context) => this.updateContextHeaders(context, phaseId)));
375
384
  await Promise.all([...this.pages].flatMap((page) => page.frames()).map((frame) => frame
376
- .evaluate(({ id, storageKey }) => {
385
+ .evaluate(({ id, storageKey, scopeCookie, scopeValue, phaseCookie }) => {
377
386
  globalThis.__SUPERCOV_PHASE_ID__ = id;
378
387
  try {
379
388
  localStorage.setItem(storageKey, id);
389
+ document.cookie = `${scopeCookie}=${encodeURIComponent(scopeValue)}; Path=/; SameSite=Lax`;
390
+ document.cookie = `${phaseCookie}=${encodeURIComponent(id)}; Path=/; SameSite=Lax`;
380
391
  }
381
392
  catch {
382
393
  // Sandboxed/cross-origin frames may not expose localStorage.
383
394
  }
384
- }, { id: phaseId, storageKey: PHASE_STORAGE_KEY })
395
+ }, {
396
+ id: phaseId,
397
+ storageKey: PHASE_STORAGE_KEY,
398
+ scopeCookie: COVERAGE_SCOPE_COOKIE,
399
+ scopeValue: encodeCoverageScope(this.scope),
400
+ phaseCookie: COVERAGE_PHASE_COOKIE,
401
+ })
385
402
  .catch(() => undefined)));
386
403
  await Promise.all([...this.workers].map((worker) => worker
387
404
  .evaluate((id) => {
@@ -767,7 +784,7 @@ const instrumentedTest = base.extend({
767
784
  server,
768
785
  };
769
786
  const serialized = `${JSON.stringify(payload)}\n`;
770
- writeFileSync(outputPath, serialized);
787
+ atomicWriteFileSync(outputPath, serialized);
771
788
  // Pool runners may cycle-restore a VM immediately after Playwright
772
789
  // exits, which can discard or overwrite the normal artifact copy.
773
790
  // Write one uniquely named, one-shot evidence file to the runner's
@@ -781,7 +798,7 @@ const instrumentedTest = base.extend({
781
798
  const safeTestId = testInfo.testId.replace(/[^a-zA-Z0-9_-]/g, "_");
782
799
  const testEvidenceDirectory = resolve(resolvedDirectory, `${safeTestId}-${testInfo.retry}`);
783
800
  mkdirSync(testEvidenceDirectory, { recursive: true });
784
- writeFileSync(resolve(testEvidenceDirectory, "mcdc.json"), serialized);
801
+ atomicWriteFileSync(resolve(testEvidenceDirectory, "mcdc.json"), serialized);
785
802
  }
786
803
  }
787
804
  },
@@ -789,6 +806,5 @@ const instrumentedTest = base.extend({
789
806
  ],
790
807
  });
791
808
  export const test = instrumentedTest;
792
- export const offlineTest = instrumentedTest;
793
- export const WebhookBodiesContract = adapter.WebhookBodiesContract;
809
+ /*__SUPERCOV_ADAPTER_EXPORTS__*/
794
810
  //# sourceMappingURL=playwright.js.map