mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-06 23:32:12 +03:00
fix(browser): avoid bundling optional cloakbrowser import (#3460)
Integrated into release/v3.8.17
This commit is contained in:
@@ -78,11 +78,17 @@ const state: PoolState = {
|
||||
cloakLaunchResolved: false,
|
||||
};
|
||||
|
||||
function getCloakbrowserModuleId(): string {
|
||||
// Keep this computed: cloakbrowser is an optional runtime enhancer, and a literal
|
||||
// dynamic import with the package name makes Turbopack resolve it during route compilation.
|
||||
return ["cloak", "browser"].join("");
|
||||
}
|
||||
|
||||
async function resolveCloakLaunch(): Promise<((opts: unknown) => Promise<Browser>) | null> {
|
||||
if (state.cloakLaunchResolved) return state.cloakLaunch;
|
||||
state.cloakLaunchResolved = true;
|
||||
try {
|
||||
const mod = (await import("cloakbrowser")) as unknown as {
|
||||
const mod = (await import(getCloakbrowserModuleId())) as unknown as {
|
||||
launch?: (opts: unknown) => Promise<Browser>;
|
||||
};
|
||||
state.cloakLaunch = mod.launch ?? null;
|
||||
@@ -110,7 +116,12 @@ function evictStaleContexts(): void {
|
||||
const now = Date.now();
|
||||
for (const [key, pooled] of state.contexts) {
|
||||
if (now - pooled.lastUsed > CONTEXT_TTL_MS) {
|
||||
console.log("[BrowserPool] Evicted stale context:", key, "(idle", ((now - pooled.lastUsed) / 1000).toFixed(0) + "s)");
|
||||
console.log(
|
||||
"[BrowserPool] Evicted stale context:",
|
||||
key,
|
||||
"(idle",
|
||||
((now - pooled.lastUsed) / 1000).toFixed(0) + "s)"
|
||||
);
|
||||
state.contexts.delete(key);
|
||||
pooled.context.close().catch(() => {});
|
||||
}
|
||||
|
||||
27
tests/unit/browser-pool-optional-import.test.ts
Normal file
27
tests/unit/browser-pool-optional-import.test.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
import { describe, it } from "node:test";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const REPO_ROOT = path.resolve(__dirname, "../..");
|
||||
const BROWSER_POOL_PATH = path.join(REPO_ROOT, "open-sse/services/browserPool.ts");
|
||||
|
||||
describe("browserPool optional cloakbrowser import", () => {
|
||||
it("keeps cloakbrowser out of static dynamic import resolution", () => {
|
||||
const source = readFileSync(BROWSER_POOL_PATH, "utf8");
|
||||
|
||||
assert.equal(
|
||||
/import\(\s*["']cloakbrowser["']\s*\)/.test(source),
|
||||
false,
|
||||
"cloakbrowser must remain runtime-optional; static dynamic import triggers Turbopack resolution"
|
||||
);
|
||||
assert.match(
|
||||
source,
|
||||
/Turbopack resolve it during route compilation/,
|
||||
"the computed import rationale should stay documented near the helper"
|
||||
);
|
||||
assert.match(source, /return \["cloak", "browser"\]\.join\(""\);/);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user