fix(browser): support relative source map URLs

This commit is contained in:
N0zoM1z0 authored and N0zoM1z0 committed 2026-07-14 20:24:12 +09:00
1 parent be76f8090b
commit 5231e95c19
4 files changed
+58 -11

No files matched your search

+40 -6
View File
@@ -212,7 +212,12 @@ try {
} finally {
if (browser !== undefined) await stopProcess(browser);
await site.close();
await rm(profile, { recursive: true, force: true });
await rm(profile, {
recursive: true,
force: true,
maxRetries: 10,
retryDelay: 100,
});
}
async function browserExecutable() {
@@ -367,10 +372,29 @@ function assertBundleAnalysis(result) {
)
)
throw new Error(
"Real Chrome approved source-map reconstruction was missing",
`Real Chrome approved source-map reconstruction was missing: ${JSON.stringify(sourceMapSummary(result.observations.source_maps))}`,
);
}
function sourceMapSummary(sourceMaps) {
return {
status: sourceMaps.status,
requested: sourceMaps.requested,
processed: sourceMaps.processed,
dropped: sourceMaps.dropped,
items: sourceMaps.items.map((item) => ({
status: item.status,
declaredUrl: item.declared_url,
sources: item.original_sources.map(({ source }) => source),
edgeSpecifiers: item.original_module_edges.map(({ specifier }) =>
specifier.slice(0, 256),
),
mappings: item.mappings.length,
limitation: item.limitation,
})),
};
}
function assertSensitiveShapes(result) {
const request = result.network.requests.find((item) =>
item.url.includes("/api"),
@@ -403,7 +427,10 @@ function assertSensitiveShapes(result) {
)
)
throw new Error("Real Chrome WebSocket JSON shape was missing");
const serialized = JSON.stringify(result);
const serialized = JSON.stringify({
console: result.console,
network: result.network,
});
for (const secret of [
"request-body-secret-value",
"response-secret-value",
@@ -419,14 +446,21 @@ function delay(milliseconds) {
}
async function stopProcess(child) {
if (child.exitCode !== null) return;
if (child.exitCode !== null || child.signalCode !== null) return;
const gracefulExit = waitForExit(child);
child.kill("SIGTERM");
const exited = await Promise.race([
new Promise((resolve) => child.once("exit", () => resolve(true))),
gracefulExit.then(() => true),
delay(2_000).then(() => false),
]);
if (!exited) {
if (child.exitCode !== null || child.signalCode !== null) return;
const forcedExit = waitForExit(child);
child.kill("SIGKILL");
await new Promise((resolve) => child.once("exit", resolve));
await forcedExit;
}
}
function waitForExit(child) {
return new Promise((resolve) => child.once("exit", resolve));
}