import { readFileSync } from "node:fs"; const page = readFileSync(new URL("../src/features/files/FilesPage.tsx", import.meta.url), "utf8").replace(/\s+/g, " "); const api = readFileSync(new URL("../src/api/files.ts", import.meta.url), "utf8").replace(/\s+/g, " "); function assertIncludes(source, fragment, message) { if (!source.includes(fragment.replace(/\s+/g, " "))) throw new Error(message); } assertIncludes( api, "campaign_usage?: FileCampaignUsageFilter; audit_relevant?: boolean;", "the Files API must expose structured campaign and audit filters" ); assertIncludes( api, "do { const response = await listFiles", "property filtering must traverse every server result page" ); assertIncludes( page, "if (propertyFiltersActive && propertyFilterResults) return propertyFilterResults;", "server-filtered rows must replace, not narrow, the currently loaded explorer window" ); assertIncludes( page, '', "the high-priority unlinked campaign-file filter must remain available" ); assertIncludes( page, "setPropertyFilterTotal(response.total);", "the UI must retain the exact server-side filtered count" ); console.log("Files property filters cover the complete server result window.");