refactor: remove global mutable state — registry guard, compat warning, stats
predicates.ts: Replace defaultPredicatesRegistered boolean guard with
sentinel predicate check inside the registry. registerDefaultPredicates()
is now always safe to call — no module-scope flag that can drift out
of sync with the actual registry state. clearPredicateRegistry() no
longer needs to manually reset a flag.
extraction.ts:
- Replace compatibilityWarningEmitted process-singleton boolean with
WeakSet<ImhotepUi> (warnedUis). Each ImhotepUi instance now gets its
own compatibility warning, fixing the bug where two pages would share
a single warning gate.
- Export resetExtractionPathStats() for test isolation of fast-path
and CDP fallback counters.
598 SDK + 3 conformance + 57 E2E = 658 tests pass.
This commit is contained in:
@@ -83,6 +83,12 @@ const extractionPathStats = {
|
||||
cdpFallbacks: 0,
|
||||
}
|
||||
|
||||
/** Reset extraction path counters (for test isolation). */
|
||||
export function resetExtractionPathStats(): void {
|
||||
extractionPathStats.fastPathHits = 0
|
||||
extractionPathStats.cdpFallbacks = 0
|
||||
}
|
||||
|
||||
const pageCacheNamespace = new WeakMap<Page, string>()
|
||||
let pageCacheNamespaceCounter = 0
|
||||
|
||||
@@ -95,7 +101,7 @@ function getPageCacheNamespace(page: Page): string {
|
||||
}
|
||||
|
||||
let extractionStatsHookInstalled = false
|
||||
let compatibilityWarningEmitted = false
|
||||
const warnedUis = new WeakSet<ImhotepUi>()
|
||||
|
||||
function maybeInstallExtractionStatsHook(): void {
|
||||
if (extractionStatsHookInstalled) return
|
||||
@@ -1980,10 +1986,10 @@ export function buildCompatibilityReport(ui: ImhotepUi): CompatibilityReport {
|
||||
}
|
||||
|
||||
export function maybeEmitCompatibilityWarning(ui: ImhotepUi): void {
|
||||
if (compatibilityWarningEmitted) return
|
||||
if (warnedUis.has(ui)) return
|
||||
const report = buildCompatibilityReport(ui)
|
||||
if (report.ok) return
|
||||
compatibilityWarningEmitted = true
|
||||
warnedUis.add(ui)
|
||||
const failed = report.checks.filter((c) => !c.ok)
|
||||
const detail = failed.map((c) => `${c.id}: ${c.details}`).join(' | ')
|
||||
const fingerprints = report.packageFingerprints
|
||||
|
||||
Reference in New Issue
Block a user