@decantr/verifier 2.3.2 → 2.3.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.
- package/README.md +2 -0
- package/dist/index.js +43 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/runtime.ts","../src/interactions.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readdirSync, readFileSync, realpathSync, statSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { basename, dirname, extname, isAbsolute, join, relative, resolve } from 'node:path';\nimport type { ReviewExecutionPack } from '@decantr/core';\nimport type { EssenceFile, EssenceV4, GuardViolation } from '@decantr/essence-spec';\nimport { evaluateGuard, isV4, validateEssence } from '@decantr/essence-spec';\nimport * as ts from 'typescript';\nimport { auditBuiltDist, emptyRuntimeAudit, type RuntimeAudit } from './runtime.js';\n\nexport type {\n InteractionMissingFinding,\n InteractionRequirement,\n InteractionSignal,\n} from './interactions.js';\n// V4 C4 — experiential interaction verifier.\nexport {\n INTERACTION_SIGNALS,\n listKnownInteractions,\n verifyInteractionsInSource,\n} from './interactions.js';\nexport type { BuiltDistAuditOptions, RuntimeAudit } from './runtime.js';\nexport { auditBuiltDist, emptyRuntimeAudit } from './runtime.js';\n\nexport const VERIFICATION_SCHEMA_URLS = {\n common: 'https://decantr.ai/schemas/verification-report.common.v1.json',\n projectAudit: 'https://decantr.ai/schemas/project-audit-report.v1.json',\n projectHealth: 'https://decantr.ai/schemas/project-health-report.v1.json',\n decantrCi: 'https://decantr.ai/schemas/decantr-ci-report.v1.json',\n evidenceBundle: 'https://decantr.ai/schemas/evidence-bundle.v1.json',\n workspaceHealth: 'https://decantr.ai/schemas/workspace-health-report.v1.json',\n fileCritique: 'https://decantr.ai/schemas/file-critique-report.v1.json',\n showcaseShortlist: 'https://decantr.ai/schemas/showcase-shortlist-report.v1.json',\n} as const;\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\nexport type ProjectHealthStatus = 'healthy' | 'warning' | 'error';\nexport type ProjectHealthFindingSource =\n | 'audit'\n | 'assertion'\n | 'browser'\n | 'check'\n | 'brownfield'\n | 'design-token'\n | 'runtime'\n | 'pack'\n | 'interaction';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\ninterface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifest {\n $schema?: string;\n version: string;\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review?: PackManifestEntry | null;\n sections: Array<PackManifestEntry & { pageIds: string[] }>;\n pages: Array<PackManifestEntry & { sectionId: string | null; sectionRole: string | null }>;\n mutations?: Array<PackManifestEntry & { mutationType: string }>;\n}\n\nexport interface MissingPackManifestFile {\n entryId: string;\n kind: 'scaffold' | 'review' | 'section' | 'page' | 'mutation';\n field: 'markdown' | 'json';\n relativePath: string;\n absolutePath: string;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: PackManifest | null;\n runtimeAudit: RuntimeAudit;\n findings: VerificationFinding[];\n summary: {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n };\n}\n\nexport interface ProjectHealthRemediation {\n summary: string;\n prompt: string;\n commands: string[];\n}\n\nexport interface ProjectHealthFinding {\n id: string;\n source: ProjectHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n remediation: ProjectHealthRemediation;\n}\n\nexport interface ProjectHealthRouteSummary {\n declared: string[];\n runtimeChecked: string[];\n runtimeMatched: number;\n runtimeCoverageOk: boolean | null;\n issues: string[];\n}\n\nexport interface ProjectHealthPackSummary {\n manifestPresent: boolean;\n reviewPackPresent: boolean;\n scaffoldPackPresent: boolean;\n sectionPackCount: number;\n pagePackCount: number;\n mutationPackCount: number;\n generatedAt: string | null;\n}\n\nexport interface ProjectHealthReport {\n $schema: string;\n generatedAt: string;\n projectRoot: string;\n status: ProjectHealthStatus;\n score: number;\n summary: {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n workflowMode: string | null;\n adoptionMode: string | null;\n essenceVersion: string | null;\n pageCount: number;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n packManifestPresent: boolean;\n reviewPackPresent: boolean;\n };\n routes: ProjectHealthRouteSummary;\n packs: ProjectHealthPackSummary;\n ci: {\n recommendedCommand: string;\n failOn: 'error' | 'warn' | 'none';\n };\n findings: ProjectHealthFinding[];\n}\n\nexport type ContractAssertionCategory =\n | 'route'\n | 'shell'\n | 'region'\n | 'interaction'\n | 'accessibility'\n | 'design-token'\n | 'context'\n | 'policy';\n\nexport interface ContractAssertion {\n id: string;\n category: ContractAssertionCategory;\n status: 'passed' | 'failed' | 'not_applicable';\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n rule: string;\n suggestedFix?: string;\n}\n\nexport interface EvidenceProvenanceEntry {\n path: string;\n present: boolean;\n hash: string | null;\n generatedAt: string | null;\n}\n\nexport interface EvidenceBundle {\n $schema: string;\n generatedAt: string;\n project: {\n id: string;\n rootLabel: string;\n };\n toolchain: {\n verifierVersion: string | null;\n };\n privacy: {\n localOnly: boolean;\n redactedFields: string[];\n screenshotsLocalOnly: boolean;\n };\n health: {\n status: ProjectHealthStatus;\n score: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n };\n provenance: {\n essence: EvidenceProvenanceEntry;\n packManifest: EvidenceProvenanceEntry;\n reviewPack: EvidenceProvenanceEntry;\n workspaceConfig?: EvidenceProvenanceEntry;\n designTokens?: EvidenceProvenanceEntry;\n };\n assertions: ContractAssertion[];\n findings: Array<{\n id: string;\n source: ProjectHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n rule?: string;\n suggestedFix?: string;\n remediationSummary: string;\n commands: string[];\n promptCommand: string;\n }>;\n browser?: {\n enabled: boolean;\n status: 'not_requested' | 'unavailable' | 'passed' | 'failed';\n baseUrl: string | null;\n screenshots: string[];\n findings: string[];\n };\n designTokens?: {\n source: string;\n status: 'not_requested' | 'passed' | 'warning' | 'error';\n compared: number;\n matched: number;\n missing: string[];\n };\n}\n\nexport interface EvidenceBundleInput {\n projectRoot: string;\n report: ProjectHealthReport;\n audit?: ProjectAuditReport | null;\n assertions?: ContractAssertion[];\n verifierVersion?: string | null;\n workspaceConfigPath?: string | null;\n designTokensPath?: string | null;\n browser?: EvidenceBundle['browser'];\n designTokens?: EvidenceBundle['designTokens'];\n}\n\nexport const EVIDENCE_BUNDLE_SCHEMA_URL = 'https://decantr.ai/schemas/evidence-bundle.v1.json';\n\nfunction hashString(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 16);\n}\n\nfunction hashFile(path: string): string | null {\n if (!existsSync(path)) return null;\n try {\n return createHash('sha256').update(readFileSync(path)).digest('hex');\n } catch {\n return null;\n }\n}\n\nfunction provenanceEntry(projectRoot: string, relativePath: string): EvidenceProvenanceEntry {\n const path = join(projectRoot, relativePath);\n if (!existsSync(path)) {\n return {\n path: relativePath,\n present: false,\n hash: null,\n generatedAt: null,\n };\n }\n\n let generatedAt: string | null = null;\n try {\n generatedAt = statSync(path).mtime.toISOString();\n } catch {\n generatedAt = null;\n }\n\n return {\n path: relativePath,\n present: true,\n hash: hashFile(path),\n generatedAt,\n };\n}\n\nfunction provenanceForPath(projectRoot: string, path: string): EvidenceProvenanceEntry {\n const rel = isAbsolute(path) ? relative(projectRoot, path).replace(/\\\\/g, '/') : path;\n return provenanceEntry(projectRoot, rel && !rel.startsWith('..') ? rel : basename(path));\n}\n\nfunction redactEvidenceText(projectRoot: string, value: string): string {\n const normalizedRoot = projectRoot.replace(/\\\\/g, '/');\n const normalized = value.replace(/\\\\/g, '/');\n if (normalized.includes(normalizedRoot)) {\n return normalized.split(normalizedRoot).join('<project>');\n }\n return normalized.replace(/\\/Users\\/[^/\\s]+/g, '~').replace(/\\/home\\/[^/\\s]+/g, '~');\n}\n\nfunction redactEvidenceList(projectRoot: string, evidence: string[]): string[] {\n return evidence.map((entry) => redactEvidenceText(projectRoot, entry));\n}\n\nfunction assertion(\n input: Omit<ContractAssertion, 'status'> & { status?: ContractAssertion['status'] },\n): ContractAssertion {\n return {\n status: 'passed',\n ...input,\n };\n}\n\nexport function createContractAssertions(\n projectRoot: string,\n audit?: ProjectAuditReport | null,\n): ContractAssertion[] {\n const assertions: ContractAssertion[] = [];\n const essence = audit?.essence;\n const v4 = essence && isV4(essence) ? essence : null;\n const contextDir = join(projectRoot, '.decantr', 'context');\n const packManifest = audit?.packManifest ?? null;\n\n assertions.push(\n assertion({\n id: 'contract.essence.present',\n category: 'context',\n severity: 'error',\n rule: 'essence-present',\n status: essence ? 'passed' : 'failed',\n message: essence\n ? 'Decantr Essence contract is present.'\n : 'No Decantr Essence contract was found.',\n evidence: [redactEvidenceText(projectRoot, join(projectRoot, 'decantr.essence.json'))],\n suggestedFix: essence ? undefined : 'Run `decantr init` or restore decantr.essence.json.',\n }),\n );\n\n assertions.push(\n assertion({\n id: 'contract.essence.v4',\n category: 'context',\n severity: 'error',\n rule: 'essence-v4',\n status: v4 ? 'passed' : essence ? 'failed' : 'not_applicable',\n message: v4\n ? 'Essence uses the active v4.0.0 contract.'\n : essence\n ? 'Essence is not the active v4.0.0 contract.'\n : 'Essence version could not be checked.',\n evidence: [essence ? `version=${String(essence.version)}` : 'essence missing'],\n suggestedFix: v4 ? undefined : 'Run `decantr migrate --to v4` before reliability checks.',\n }),\n );\n\n if (v4) {\n const declaredRoutes = Object.keys(v4.blueprint.routes ?? {}).sort();\n for (const route of declaredRoutes) {\n const routeTarget = (v4.blueprint.routes ?? {})[route];\n const section = v4.blueprint.sections.find((entry) => entry.id === routeTarget.section);\n const page = section?.pages.find((entry) => entry.id === routeTarget.page);\n assertions.push(\n assertion({\n id: `contract.route.${hashString(route)}`,\n category: 'route',\n severity: page ? 'info' : 'warn',\n rule: 'declared-route-resolves',\n status: page ? 'passed' : 'failed',\n target: route,\n message: page\n ? `Declared route ${route} resolves to a section page.`\n : `Declared route ${route} does not resolve to an existing section page.`,\n evidence: [`section=${routeTarget.section}`, `page=${routeTarget.page}`],\n suggestedFix: page\n ? undefined\n : 'Update blueprint.routes or add the missing section/page before running AI repair.',\n }),\n );\n }\n\n for (const section of v4.blueprint.sections) {\n assertions.push(\n assertion({\n id: `contract.shell.${section.id}`,\n category: 'shell',\n severity: section.shell && section.shell !== 'inherit' ? 'info' : 'warn',\n rule: 'section-shell-concrete',\n status: section.shell && section.shell !== 'inherit' ? 'passed' : 'failed',\n target: section.id,\n message:\n section.shell && section.shell !== 'inherit'\n ? `Section ${section.id} uses concrete shell ${section.shell}.`\n : `Section ${section.id} does not declare a concrete shell.`,\n evidence: [`shell=${section.shell || 'missing'}`],\n suggestedFix:\n section.shell && section.shell !== 'inherit'\n ? undefined\n : 'Resolve inherited shells during composition so AI agents get concrete layout intent.',\n }),\n );\n }\n\n assertions.push(\n assertion({\n id: 'contract.accessibility.focus-visible',\n category: 'accessibility',\n severity: v4.dna.accessibility.focus_visible ? 'info' : 'warn',\n rule: 'focus-visible-enabled',\n status: v4.dna.accessibility.focus_visible ? 'passed' : 'failed',\n message: v4.dna.accessibility.focus_visible\n ? 'DNA requires visible focus states.'\n : 'DNA does not require visible focus states.',\n evidence: [`focus_visible=${String(v4.dna.accessibility.focus_visible)}`],\n suggestedFix: v4.dna.accessibility.focus_visible\n ? undefined\n : 'Set dna.accessibility.focus_visible=true for stronger UI reliability gates.',\n }),\n );\n }\n\n assertions.push(\n assertion({\n id: 'contract.context.pack-manifest',\n category: 'context',\n severity: packManifest ? 'info' : 'warn',\n rule: 'pack-manifest-present',\n status: packManifest ? 'passed' : 'failed',\n message: packManifest\n ? 'Compiled execution pack manifest is present.'\n : 'Compiled execution pack manifest is missing.',\n evidence: [redactEvidenceText(projectRoot, join(contextDir, 'pack-manifest.json'))],\n suggestedFix: packManifest\n ? undefined\n : 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate the full context pack bundle.',\n }),\n );\n\n assertions.push(\n assertion({\n id: 'contract.context.review-pack',\n category: 'context',\n severity: audit?.reviewPack ? 'info' : 'warn',\n rule: 'review-pack-present',\n status: audit?.reviewPack ? 'passed' : 'failed',\n message: audit?.reviewPack\n ? 'Compiled review pack is present.'\n : 'Compiled review pack is missing.',\n evidence: [redactEvidenceText(projectRoot, join(contextDir, 'review-pack.json'))],\n suggestedFix: audit?.reviewPack\n ? undefined\n : 'Run `decantr registry compile-packs decantr.essence.json --write-context` so critique has the compiled review contract.',\n }),\n );\n\n const tokensPath = join(projectRoot, 'src', 'styles', 'tokens.css');\n assertions.push(\n assertion({\n id: 'contract.design-token.tokens-file',\n category: 'design-token',\n severity: existsSync(tokensPath) ? 'info' : 'warn',\n rule: 'tokens-file-present',\n status: existsSync(tokensPath) ? 'passed' : 'failed',\n message: existsSync(tokensPath)\n ? 'Decantr token CSS file is present.'\n : 'Decantr token CSS file was not found.',\n evidence: [redactEvidenceText(projectRoot, tokensPath)],\n suggestedFix: existsSync(tokensPath)\n ? undefined\n : 'Run `decantr refresh` or map Decantr tokens into the existing styling system.',\n }),\n );\n\n return assertions;\n}\n\nexport function createEvidenceBundle(input: EvidenceBundleInput): EvidenceBundle {\n const assertions = input.assertions ?? createContractAssertions(input.projectRoot, input.audit);\n let resolvedProjectRoot = input.projectRoot;\n try {\n resolvedProjectRoot = realpathSync(input.projectRoot);\n } catch {\n resolvedProjectRoot = resolve(input.projectRoot);\n }\n const projectId = `project_${hashString(resolvedProjectRoot)}`;\n\n return {\n $schema: EVIDENCE_BUNDLE_SCHEMA_URL,\n generatedAt: new Date().toISOString(),\n project: {\n id: projectId,\n rootLabel: basename(input.projectRoot) || 'project',\n },\n toolchain: {\n verifierVersion: input.verifierVersion ?? null,\n },\n privacy: {\n localOnly: true,\n redactedFields: [\n 'source',\n 'prompt',\n 'secret',\n 'environment',\n 'absolute_path',\n 'repository_name',\n ],\n screenshotsLocalOnly: true,\n },\n health: {\n status: input.report.status,\n score: input.report.score,\n errorCount: input.report.summary.errorCount,\n warnCount: input.report.summary.warnCount,\n infoCount: input.report.summary.infoCount,\n findingCount: input.report.summary.findingCount,\n },\n provenance: {\n essence: provenanceEntry(input.projectRoot, 'decantr.essence.json'),\n packManifest: provenanceEntry(input.projectRoot, '.decantr/context/pack-manifest.json'),\n reviewPack: provenanceEntry(input.projectRoot, '.decantr/context/review-pack.json'),\n ...(input.workspaceConfigPath\n ? { workspaceConfig: provenanceForPath(input.projectRoot, input.workspaceConfigPath) }\n : {}),\n ...(input.designTokensPath\n ? { designTokens: provenanceForPath(input.projectRoot, input.designTokensPath) }\n : {}),\n },\n assertions,\n findings: input.report.findings.map((finding) => ({\n id: finding.id,\n source: finding.source,\n category: finding.category,\n severity: finding.severity,\n message: redactEvidenceText(input.projectRoot, finding.message),\n evidence: redactEvidenceList(input.projectRoot, finding.evidence),\n target: finding.target ? redactEvidenceText(input.projectRoot, finding.target) : undefined,\n rule: finding.rule,\n suggestedFix: finding.suggestedFix,\n remediationSummary: finding.remediation.summary,\n commands: finding.remediation.commands,\n promptCommand: `decantr health --prompt ${finding.id}`,\n })),\n ...(input.browser ? { browser: input.browser } : {}),\n ...(input.designTokens ? { designTokens: input.designTokens } : {}),\n };\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface CritiqueSourceInput {\n filePath: string;\n code: string;\n reviewPack?: ReviewExecutionPack | null;\n packManifest?: PackManifest | null;\n treatmentsCss?: string;\n adoptionMode?: string | null;\n}\n\nexport interface ShowcaseShortlistVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsCoverageOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistVerificationReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithoutInsecureRemoteAssetTransportCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n };\n results: ShowcaseShortlistVerificationEntry[];\n}\n\nconst DEFAULT_FOCUS_AREAS = [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n];\n\nconst TREATMENT_CLASSES = [\n 'd-interactive',\n 'd-surface',\n 'd-data',\n 'd-control',\n 'd-section',\n 'd-annotation',\n 'd-label',\n];\nconst PERSONALITY_UTILS = [\n 'neon-glow',\n 'neon-text-glow',\n 'neon-border-glow',\n 'mono-data',\n 'status-ring',\n 'entrance-fade',\n];\nconst PERFORMANCE_BUDGETS = {\n largestJsAssetWarnBytes: 350_000,\n totalJsWarnBytes: 700_000,\n totalCssWarnBytes: 150_000,\n totalAssetsWarnBytes: 1_500_000,\n} as const;\n\nfunction scoreRatio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 3;\n return Math.min(5, Math.max(1, Math.round((numerator / denominator) * 5)));\n}\n\nfunction readJsonIfExists<T>(path: string): T | null {\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, 'utf-8')) as T;\n } catch {\n return null;\n }\n}\n\nfunction loadReviewPack(projectRoot: string): ReviewExecutionPack | null {\n return readJsonIfExists<ReviewExecutionPack>(\n join(projectRoot, '.decantr', 'context', 'review-pack.json'),\n );\n}\n\nfunction loadPackManifest(projectRoot: string): PackManifest | null {\n return readJsonIfExists<PackManifest>(\n join(projectRoot, '.decantr', 'context', 'pack-manifest.json'),\n );\n}\n\nfunction collectPackManifestReferences(packManifest: PackManifest): Array<{\n entryId: string;\n kind: MissingPackManifestFile['kind'];\n markdown?: string;\n json?: string;\n}> {\n const references: Array<{\n entryId: string;\n kind: MissingPackManifestFile['kind'];\n markdown?: string;\n json?: string;\n }> = [];\n\n if (packManifest.scaffold) {\n references.push({\n entryId: packManifest.scaffold.id || 'scaffold',\n kind: 'scaffold',\n markdown: packManifest.scaffold.markdown,\n json: packManifest.scaffold.json,\n });\n }\n if (packManifest.review) {\n references.push({\n entryId: packManifest.review.id || 'review',\n kind: 'review',\n markdown: packManifest.review.markdown,\n json: packManifest.review.json,\n });\n }\n for (const section of packManifest.sections ?? []) {\n references.push({\n entryId: section.id,\n kind: 'section',\n markdown: section.markdown,\n json: section.json,\n });\n }\n for (const page of packManifest.pages ?? []) {\n references.push({\n entryId: page.id,\n kind: 'page',\n markdown: page.markdown,\n json: page.json,\n });\n }\n for (const mutation of packManifest.mutations ?? []) {\n references.push({\n entryId: mutation.id,\n kind: 'mutation',\n markdown: mutation.markdown,\n json: mutation.json,\n });\n }\n\n return references;\n}\n\nexport function collectMissingPackManifestFiles(\n projectRoot: string,\n packManifest: PackManifest | null = loadPackManifest(projectRoot),\n): MissingPackManifestFile[] {\n if (!packManifest) return [];\n\n const contextDir = join(projectRoot, '.decantr', 'context');\n const missing: MissingPackManifestFile[] = [];\n for (const reference of collectPackManifestReferences(packManifest)) {\n for (const field of ['markdown', 'json'] as const) {\n const fileName = reference[field];\n if (!fileName) continue;\n const absolutePath = join(contextDir, fileName);\n if (existsSync(absolutePath)) continue;\n missing.push({\n entryId: reference.entryId,\n kind: reference.kind,\n field,\n relativePath: `.decantr/context/${fileName}`,\n absolutePath,\n });\n }\n }\n\n return missing;\n}\n\nfunction readTextIfExists(path: string): string {\n try {\n return existsSync(path) ? readFileSync(path, 'utf-8') : '';\n } catch {\n return '';\n }\n}\n\nfunction readProjectAdoptionMode(projectRoot: string): string | null {\n const projectJson = readJsonIfExists<{\n initialized?: { adoptionMode?: unknown };\n }>(join(projectRoot, '.decantr', 'project.json'));\n const adoptionMode = projectJson?.initialized?.adoptionMode;\n return typeof adoptionMode === 'string' ? adoptionMode : null;\n}\n\nfunction createSourceAuditBucket(): SourceAuditBucket {\n return { count: 0, files: [] };\n}\n\nfunction recordSourceAudit(bucket: SourceAuditBucket, filePath: string, count: number): void {\n if (count <= 0) return;\n bucket.count += count;\n if (!bucket.files.includes(filePath) && bucket.files.length < 4) {\n bucket.files.push(filePath);\n }\n}\n\nfunction sourceAuditBucketsOverlap(a: SourceAuditBucket, b: SourceAuditBucket): boolean {\n return a.files.some((file) => b.files.includes(file));\n}\n\nfunction normalizeSourceAuditPath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\nfunction getNextAppLayoutGuardRoot(filePath: string): string | null {\n const normalized = normalizeSourceAuditPath(filePath);\n const match = normalized.match(\n /^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*([^/.()[\\]]+)\\/layout\\.[cm]?[jt]sx?$/i,\n );\n return match?.[1] ?? null;\n}\n\nfunction getNextAppRouteRoot(filePath: string): string | null {\n const normalized = normalizeSourceAuditPath(filePath);\n const match = normalized.match(/^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*([^/.()[\\]]+)(?:\\/|$)/i);\n return match?.[1] ?? null;\n}\n\nfunction getRouteRoot(route: string): string | null {\n const firstSegment = route.replace(/^\\/+/, '').split('/')[0];\n if (!firstSegment || firstSegment.startsWith(':') || firstSegment.startsWith('[')) {\n return null;\n }\n return firstSegment;\n}\n\nfunction isNextAppPublicChromeFile(filePath: string): boolean {\n const normalized = normalizeSourceAuditPath(filePath);\n return /^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*(?:layout|nav|nav-header|navigation|header|footer|sidebar)\\.[cm]?[jt]sx?$/i.test(\n normalized,\n );\n}\n\nfunction sourceAuditProtectedSurfacesCoveredByGuardedNextLayouts(\n protectedSurfaces: SourceAuditBucket,\n authGuards: SourceAuditBucket,\n topology: TopologySummary,\n): boolean {\n const guardedRoots = new Set<string>();\n for (const file of authGuards.files) {\n const root = getNextAppLayoutGuardRoot(file);\n if (root) {\n guardedRoots.add(root);\n }\n }\n\n if (guardedRoots.size === 0 || protectedSurfaces.files.length === 0) {\n return false;\n }\n\n const guardedPrimaryRouteRoots = topology.primaryRoutes\n .map(getRouteRoot)\n .filter((root): root is string => Boolean(root))\n .filter((root) => guardedRoots.has(root));\n\n return protectedSurfaces.files.every((file) => {\n const appRoot = getNextAppRouteRoot(file);\n if (appRoot && guardedRoots.has(appRoot)) {\n return true;\n }\n return isNextAppPublicChromeFile(file) && guardedPrimaryRouteRoots.length > 0;\n });\n}\n\nfunction isAuditableSourceFile(filePath: string): boolean {\n if (/\\.d\\.ts$/i.test(filePath)) return false;\n return /\\.(?:[cm]?[jt]sx?)$/i.test(filePath);\n}\n\nfunction isNonProductionSourceAuditFile(filePath: string): boolean {\n const normalized = normalizeSourceAuditPath(filePath);\n return (\n /(?:^|\\/)(?:__tests__|__mocks__|tests?|specs?|fixtures?|mocks?|stories?)(?:\\/|$)/i.test(\n normalized,\n ) || /\\.(?:test|spec|stories|story|fixture|mock)\\.[cm]?[jt]sx?$/i.test(normalized)\n );\n}\n\nfunction collectProjectSourceFiles(projectRoot: string): string[] {\n const candidates = [\n 'src',\n 'app',\n 'pages',\n 'components',\n 'lib',\n 'utils',\n 'hooks',\n 'providers',\n 'server',\n ]\n .map((dir) => join(projectRoot, dir))\n .filter((dir) => existsSync(dir));\n const rootFileCandidates = [\n 'middleware.ts',\n 'middleware.tsx',\n 'middleware.js',\n 'middleware.jsx',\n 'middleware.mts',\n 'middleware.cts',\n 'proxy.ts',\n 'proxy.tsx',\n 'proxy.js',\n 'proxy.jsx',\n 'proxy.mts',\n 'proxy.cts',\n ]\n .map((file) => join(projectRoot, file))\n .filter((file) => existsSync(file));\n const files = new Set<string>();\n const ignoredDirNames = new Set([\n 'node_modules',\n '.git',\n '.decantr',\n 'dist',\n 'build',\n 'coverage',\n ]);\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (ignoredDirNames.has(entry.name)) continue;\n const absolutePath = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n if (!isAuditableSourceFile(absolutePath)) continue;\n files.add(absolutePath);\n }\n };\n\n for (const candidate of candidates) {\n walk(candidate);\n }\n\n for (const file of rootFileCandidates) {\n if (isAuditableSourceFile(file)) {\n files.add(file);\n }\n }\n\n return [...files].sort();\n}\n\nfunction buildSourceAuditEvidence(\n summary: SourceAuditSummary,\n bucket: SourceAuditBucket,\n label: string,\n): string[] {\n return [\n `Source files checked: ${summary.filesChecked}`,\n `${label}: ${bucket.count}`,\n `Affected files: ${bucket.files.join(', ')}`,\n ];\n}\n\nfunction isAuditableStyleFile(filePath: string): boolean {\n return /\\.css$/i.test(filePath);\n}\n\nfunction collectProjectStyleFiles(projectRoot: string): string[] {\n const candidates = ['src', 'app', 'styles']\n .map((dir) => join(projectRoot, dir))\n .filter((dir) => existsSync(dir));\n const files = new Set<string>();\n const ignoredDirNames = new Set([\n 'node_modules',\n '.git',\n '.decantr',\n 'dist',\n 'build',\n 'coverage',\n ]);\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (ignoredDirNames.has(entry.name)) continue;\n const absolutePath = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n if (!isAuditableStyleFile(absolutePath)) continue;\n files.add(absolutePath);\n }\n };\n\n for (const candidate of candidates) {\n walk(candidate);\n }\n\n return [...files].sort();\n}\n\nfunction countFocusVisibleSignals(code: string): number {\n const patterns = [/:focus-visible\\b/i, /\\.focus-visible\\b/i, /\\[data-focus-visible-added\\]/i];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countReducedMotionSignals(code: string): number {\n const patterns = [\n /@media\\s*\\(\\s*prefers-reduced-motion\\s*:\\s*reduce\\s*\\)/i,\n /\\[data-reduce-motion(?:=[^\\]]+)?\\]/i,\n /\\[data-motion(?:=[^\\]]*reduce[^\\]]*)\\]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\ninterface SourceAuditEntry {\n absolutePath: string;\n relativePath: string;\n code: string;\n}\n\nfunction hasModuleDirective(\n filePath: string,\n code: string,\n directive: 'use client' | 'use server',\n): boolean {\n const sourceFile = ts.createSourceFile(\n filePath,\n code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(filePath),\n );\n\n for (const statement of sourceFile.statements) {\n if (ts.isExpressionStatement(statement) && ts.isStringLiteralLike(statement.expression)) {\n if (statement.expression.text === directive) {\n return true;\n }\n continue;\n }\n break;\n }\n\n return false;\n}\n\nfunction importDeclarationHasRuntimeBinding(statement: ts.ImportDeclaration): boolean {\n const clause = statement.importClause;\n if (!clause) return true;\n if (clause.isTypeOnly) return false;\n if (clause.name) return true;\n if (!clause.namedBindings) return true;\n if (ts.isNamespaceImport(clause.namedBindings)) return true;\n return clause.namedBindings.elements.some((element) => !element.isTypeOnly);\n}\n\nfunction collectRuntimeImportSpecifiers(entry: SourceAuditEntry): string[] {\n const sourceFile = ts.createSourceFile(\n entry.relativePath,\n entry.code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(entry.relativePath),\n );\n const specifiers: string[] = [];\n\n for (const statement of sourceFile.statements) {\n if (\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteralLike(statement.moduleSpecifier) &&\n importDeclarationHasRuntimeBinding(statement)\n ) {\n specifiers.push(statement.moduleSpecifier.text);\n }\n }\n\n return specifiers;\n}\n\nfunction resolveSourceImportTarget(\n projectRoot: string,\n sourceAbsolutePath: string,\n specifier: string,\n): string | null {\n let basePath: string | null = null;\n if (specifier.startsWith('@/')) {\n basePath = join(projectRoot, 'src', specifier.slice(2));\n } else if (specifier.startsWith('./') || specifier.startsWith('../')) {\n basePath = resolve(dirname(sourceAbsolutePath), specifier);\n }\n\n if (!basePath) return null;\n\n const candidates = [\n basePath,\n `${basePath}.ts`,\n `${basePath}.tsx`,\n `${basePath}.js`,\n `${basePath}.jsx`,\n `${basePath}.mts`,\n `${basePath}.cts`,\n join(basePath, 'index.ts'),\n join(basePath, 'index.tsx'),\n join(basePath, 'index.js'),\n join(basePath, 'index.jsx'),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate) && isAuditableSourceFile(candidate)) {\n return relative(projectRoot, candidate) || candidate;\n }\n }\n\n return null;\n}\n\nfunction collectClientReachableSourceFiles(\n projectRoot: string,\n entries: SourceAuditEntry[],\n): Set<string> {\n const entriesByRelativePath = new Map(entries.map((entry) => [entry.relativePath, entry]));\n const runtimeImportGraph = new Map<string, string[]>();\n\n for (const entry of entries) {\n const targets = collectRuntimeImportSpecifiers(entry)\n .map((specifier) => resolveSourceImportTarget(projectRoot, entry.absolutePath, specifier))\n .filter((target): target is string => Boolean(target));\n runtimeImportGraph.set(entry.relativePath, targets);\n }\n\n const reachable = new Set<string>();\n const queue = entries\n .filter((entry) => hasModuleDirective(entry.relativePath, entry.code, 'use client'))\n .map((entry) => entry.relativePath);\n\n for (const root of queue) {\n reachable.add(root);\n }\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n for (const target of runtimeImportGraph.get(current) ?? []) {\n const targetEntry = entriesByRelativePath.get(target);\n if (targetEntry && hasModuleDirective(target, targetEntry.code, 'use server')) {\n continue;\n }\n if (!reachable.has(target)) {\n reachable.add(target);\n queue.push(target);\n }\n }\n }\n\n return reachable;\n}\n\nfunction isClientAuthHeaderSource(\n relativePath: string,\n code: string,\n clientReachableFiles: Set<string>,\n): boolean {\n if (hasModuleDirective(relativePath, code, 'use server')) {\n return false;\n }\n if (clientReachableFiles.has(relativePath)) {\n return true;\n }\n\n const normalized = normalizeSourceAuditPath(relativePath);\n if (/^(?:src\\/)?app\\//i.test(normalized)) {\n return false;\n }\n\n return /(?:^|\\/)(?:components|routes|pages|hooks|providers)\\//i.test(normalized);\n}\n\nfunction auditProjectSourceTree(projectRoot: string): SourceAuditSummary {\n const sourceFiles = collectProjectSourceFiles(projectRoot);\n const sourceEntries = sourceFiles\n .map((sourceFile) => ({\n absolutePath: sourceFile,\n relativePath: relative(projectRoot, sourceFile) || sourceFile,\n code: readFileSync(sourceFile, 'utf-8'),\n }))\n .filter((entry) => !isNonProductionSourceAuditFile(entry.relativePath));\n const clientReachableFiles = collectClientReachableSourceFiles(projectRoot, sourceEntries);\n const summary: SourceAuditSummary = {\n filesChecked: sourceEntries.length,\n inlineStyles: createSourceAuditBucket(),\n componentStyleTags: createSourceAuditBucket(),\n localCssRuntimeSignals: createSourceAuditBucket(),\n securityRiskPatterns: createSourceAuditBucket(),\n localhostEndpointSignals: createSourceAuditBucket(),\n placeholderRoutes: createSourceAuditBucket(),\n commandPaletteSignals: createSourceAuditBucket(),\n keyboardShortcutSignals: createSourceAuditBucket(),\n protectedSurfaceSignals: createSourceAuditBucket(),\n authProtectedRedirectSignals: createSourceAuditBucket(),\n authAnonymousRedirectSignals: createSourceAuditBucket(),\n authOpenRedirectSignals: createSourceAuditBucket(),\n authExternalRedirectSignals: createSourceAuditBucket(),\n authProviderStateSignals: createSourceAuditBucket(),\n authProviderPkceSignals: createSourceAuditBucket(),\n authProviderNonceSignals: createSourceAuditBucket(),\n skipNavSignals: createSourceAuditBucket(),\n skipNavTargetIds: [],\n mainLandmarkSignals: createSourceAuditBucket(),\n mainLandmarkIds: [],\n authEntrySignals: createSourceAuditBucket(),\n signInFlowSignals: createSourceAuditBucket(),\n signUpFlowSignals: createSourceAuditBucket(),\n recoveryFlowSignals: createSourceAuditBucket(),\n authSessionSignals: createSourceAuditBucket(),\n authUnauthenticatedBranchSignals: createSourceAuditBucket(),\n authLoadingSignals: createSourceAuditBucket(),\n authProtectedLoadingRenderSignals: createSourceAuditBucket(),\n authBlankLoadingRenderSignals: createSourceAuditBucket(),\n authAnonymousLoadingRedirectSignals: createSourceAuditBucket(),\n authProtectedUnauthenticatedRenderSignals: createSourceAuditBucket(),\n authErrorSignals: createSourceAuditBucket(),\n authSuccessSignals: createSourceAuditBucket(),\n authCallbackTokenSignals: createSourceAuditBucket(),\n authCallbackExchangeSignals: createSourceAuditBucket(),\n authCallbackExchangeErrorSignals: createSourceAuditBucket(),\n authCallbackErrorSignals: createSourceAuditBucket(),\n authCallbackStateSignals: createSourceAuditBucket(),\n authCallbackStateValidationSignals: createSourceAuditBucket(),\n authCallbackStateStorageSignals: createSourceAuditBucket(),\n authCallbackStateStorageClearSignals: createSourceAuditBucket(),\n authCallbackUrlScrubSignals: createSourceAuditBucket(),\n authStorageWrites: createSourceAuditBucket(),\n authStorageClears: createSourceAuditBucket(),\n authCookieWrites: createSourceAuditBucket(),\n authCookieClears: createSourceAuditBucket(),\n authHeaderWrites: createSourceAuditBucket(),\n authHeaderClears: createSourceAuditBucket(),\n authCacheClients: createSourceAuditBucket(),\n authCacheClears: createSourceAuditBucket(),\n authRefreshSignals: createSourceAuditBucket(),\n authRefreshClears: createSourceAuditBucket(),\n authRealtimeSignals: createSourceAuditBucket(),\n authRealtimeClears: createSourceAuditBucket(),\n authCoordinationSignals: createSourceAuditBucket(),\n authCoordinationClears: createSourceAuditBucket(),\n authGuardSignals: createSourceAuditBucket(),\n authExitSignals: createSourceAuditBucket(),\n authSessionTeardownSignals: createSourceAuditBucket(),\n signInRouteSignals: createSourceAuditBucket(),\n registrationRouteSignals: createSourceAuditBucket(),\n recoveryRouteSignals: createSourceAuditBucket(),\n accessibilityIssues: createSourceAuditBucket(),\n interactionSafetyIssues: createSourceAuditBucket(),\n authInputHintIssues: createSourceAuditBucket(),\n };\n\n for (const { relativePath, code } of sourceEntries) {\n const signals = analyzeAstSignals(relativePath, code);\n const isClientAuthHeaderSourceFile = isClientAuthHeaderSource(\n relativePath,\n code,\n clientReachableFiles,\n );\n const accessibilityIssueCount =\n signals.iconOnlyButtonWithoutLabelCount +\n signals.iconOnlyLinkWithoutLabelCount +\n signals.clickableNonSemanticCount +\n signals.unlabeledNavigationLandmarkCount +\n signals.imageWithoutAltCount +\n signals.iframeWithoutTitleCount +\n signals.dialogWithoutLabelCount +\n signals.dialogWithoutModalHintCount +\n signals.tableWithoutHeaderCount +\n signals.tableWithoutCaptionCount +\n signals.formControlWithoutLabelCount;\n const securityRiskPatternCount =\n signals.dangerousHtmlCount +\n signals.rawHtmlInjectionCount +\n signals.dynamicEvalCount +\n signals.hardcodedSecretSignalCount +\n signals.clientSecretEnvReferenceCount +\n signals.localhostEndpointCount +\n signals.wildcardPostMessageCount +\n signals.windowOpenWithoutNoopenerCount +\n signals.externalIframeWithoutSandboxCount +\n signals.insecureExternalIframeCount +\n signals.insecureFormActionCount +\n signals.insecureAuthFormMethodCount +\n signals.insecureTransportEndpointCount +\n signals.insecureExternalImageCount +\n signals.authCookieMissingHardeningCount +\n signals.authOpenRedirectSignalCount +\n signals.authExternalRedirectSignalCount +\n signals.authProviderStateMissingCount +\n signals.authProviderPkceMissingCount +\n signals.authProviderNonceMissingCount +\n signals.externalBlankLinkWithoutRelCount;\n const authInputHintIssueCount =\n signals.emailAutocompleteMissingCount +\n signals.passwordAutocompleteMissingCount +\n signals.otpAutocompleteMissingCount +\n signals.authAutocompleteDisabledCount +\n signals.authAutocompleteSemanticMismatchCount +\n signals.authInputTypeMismatchCount;\n const localCssRuntimeCount =\n /(?:^|\\/)(?:lib|utils)\\/css\\.(?:[cm]?[jt]sx?)$/i.test(relativePath) ||\n /(?:^|\\/)styles\\/atoms\\.css$/i.test(relativePath) ||\n /Lightweight @decantr\\/css atom runtime/i.test(code)\n ? 1\n : 0;\n const componentStyleTagCount = countComponentStyleTagSignals(code);\n const commandPaletteSignalCount = countCommandPaletteSignals(code);\n const keyboardShortcutSignalCount = countKeyboardShortcutSignals(code);\n\n recordSourceAudit(summary.inlineStyles, relativePath, signals.inlineStyleAttributeCount);\n recordSourceAudit(summary.componentStyleTags, relativePath, componentStyleTagCount);\n recordSourceAudit(summary.localCssRuntimeSignals, relativePath, localCssRuntimeCount);\n recordSourceAudit(summary.securityRiskPatterns, relativePath, securityRiskPatternCount);\n recordSourceAudit(\n summary.localhostEndpointSignals,\n relativePath,\n signals.localhostEndpointCount,\n );\n recordSourceAudit(\n summary.placeholderRoutes,\n relativePath,\n signals.placeholderNavigationTargetCount,\n );\n recordSourceAudit(summary.commandPaletteSignals, relativePath, commandPaletteSignalCount);\n recordSourceAudit(summary.keyboardShortcutSignals, relativePath, keyboardShortcutSignalCount);\n recordSourceAudit(\n summary.protectedSurfaceSignals,\n relativePath,\n signals.protectedSurfaceSignalCount,\n );\n recordSourceAudit(\n summary.authProtectedRedirectSignals,\n relativePath,\n signals.authProtectedRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authAnonymousRedirectSignals,\n relativePath,\n signals.authAnonymousRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authOpenRedirectSignals,\n relativePath,\n signals.authOpenRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authExternalRedirectSignals,\n relativePath,\n signals.authExternalRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authProviderStateSignals,\n relativePath,\n signals.authProviderStateMissingCount,\n );\n recordSourceAudit(\n summary.authProviderPkceSignals,\n relativePath,\n signals.authProviderPkceMissingCount,\n );\n recordSourceAudit(\n summary.authProviderNonceSignals,\n relativePath,\n signals.authProviderNonceMissingCount,\n );\n recordSourceAudit(summary.skipNavSignals, relativePath, signals.skipNavSignalCount);\n recordSourceAudit(summary.mainLandmarkSignals, relativePath, signals.mainLandmarkCount);\n for (const targetId of signals.skipNavTargetIds) {\n if (!summary.skipNavTargetIds.includes(targetId)) {\n summary.skipNavTargetIds.push(targetId);\n }\n }\n for (const landmarkId of signals.mainLandmarkIds) {\n if (!summary.mainLandmarkIds.includes(landmarkId)) {\n summary.mainLandmarkIds.push(landmarkId);\n }\n }\n recordSourceAudit(summary.authEntrySignals, relativePath, signals.authEntrySignalCount);\n recordSourceAudit(\n summary.signInFlowSignals,\n relativePath,\n countSignInFlowSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.signUpFlowSignals,\n relativePath,\n countSignUpFlowSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.recoveryFlowSignals,\n relativePath,\n countRecoveryFlowSignals(code, relativePath),\n );\n recordSourceAudit(summary.authSessionSignals, relativePath, signals.authSessionSignalCount);\n recordSourceAudit(\n summary.authUnauthenticatedBranchSignals,\n relativePath,\n countAuthUnauthenticatedBranchSignals(code),\n );\n recordSourceAudit(summary.authLoadingSignals, relativePath, signals.authLoadingSignalCount);\n recordSourceAudit(\n summary.authProtectedLoadingRenderSignals,\n relativePath,\n signals.authProtectedLoadingRenderCount,\n );\n recordSourceAudit(\n summary.authBlankLoadingRenderSignals,\n relativePath,\n signals.authBlankLoadingRenderCount,\n );\n recordSourceAudit(\n summary.authAnonymousLoadingRedirectSignals,\n relativePath,\n signals.authAnonymousLoadingRedirectCount,\n );\n recordSourceAudit(\n summary.authProtectedUnauthenticatedRenderSignals,\n relativePath,\n signals.authProtectedUnauthenticatedRenderCount,\n );\n recordSourceAudit(summary.authErrorSignals, relativePath, countAuthErrorSignals(code));\n recordSourceAudit(summary.authSuccessSignals, relativePath, countAuthSuccessSignals(code));\n recordSourceAudit(\n summary.authCallbackTokenSignals,\n relativePath,\n countAuthCallbackTokenSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.authCallbackExchangeSignals,\n relativePath,\n countAuthCallbackExchangeSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackExchangeErrorSignals,\n relativePath,\n countAuthCallbackExchangeErrorSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackErrorSignals,\n relativePath,\n countAuthCallbackErrorSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.authCallbackStateSignals,\n relativePath,\n countAuthCallbackStateSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateValidationSignals,\n relativePath,\n countAuthCallbackStateValidationSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateStorageSignals,\n relativePath,\n countAuthCallbackStateStorageSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateStorageClearSignals,\n relativePath,\n countAuthCallbackStateStorageClearSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackUrlScrubSignals,\n relativePath,\n countAuthCallbackUrlScrubSignals(code),\n );\n recordSourceAudit(summary.authStorageWrites, relativePath, signals.authStorageWriteCount);\n recordSourceAudit(summary.authStorageClears, relativePath, signals.authStorageClearCount);\n recordSourceAudit(summary.authCookieWrites, relativePath, signals.authCookieWriteCount);\n recordSourceAudit(summary.authCookieClears, relativePath, signals.authCookieClearCount);\n recordSourceAudit(\n summary.authHeaderWrites,\n relativePath,\n isClientAuthHeaderSourceFile ? signals.authHeaderWriteCount : 0,\n );\n recordSourceAudit(\n summary.authHeaderClears,\n relativePath,\n isClientAuthHeaderSourceFile ? signals.authHeaderClearCount : 0,\n );\n recordSourceAudit(summary.authCacheClients, relativePath, signals.authCacheClientCount);\n recordSourceAudit(summary.authCacheClears, relativePath, signals.authCacheClearCount);\n recordSourceAudit(summary.authRefreshSignals, relativePath, signals.authRefreshSignalCount);\n recordSourceAudit(summary.authRefreshClears, relativePath, signals.authRefreshClearCount);\n recordSourceAudit(summary.authRealtimeSignals, relativePath, countAuthRealtimeSignals(code));\n recordSourceAudit(\n summary.authRealtimeClears,\n relativePath,\n countAuthRealtimeClearSignals(code),\n );\n recordSourceAudit(\n summary.authCoordinationSignals,\n relativePath,\n countAuthCoordinationSignals(code),\n );\n recordSourceAudit(\n summary.authCoordinationClears,\n relativePath,\n countAuthCoordinationClearSignals(code),\n );\n recordSourceAudit(summary.authGuardSignals, relativePath, signals.authGuardSignalCount);\n recordSourceAudit(summary.authExitSignals, relativePath, signals.authExitSignalCount);\n recordSourceAudit(\n summary.authSessionTeardownSignals,\n relativePath,\n signals.authSessionTeardownSignalCount,\n );\n recordSourceAudit(summary.signInRouteSignals, relativePath, countSignInRouteSignals(code));\n recordSourceAudit(\n summary.registrationRouteSignals,\n relativePath,\n countRegistrationRouteSignals(code),\n );\n recordSourceAudit(\n summary.recoveryRouteSignals,\n relativePath,\n countAuthRecoveryRouteSignals(code),\n );\n recordSourceAudit(summary.accessibilityIssues, relativePath, accessibilityIssueCount);\n recordSourceAudit(\n summary.interactionSafetyIssues,\n relativePath,\n signals.buttonInFormWithoutTypeCount +\n signals.authFormWithoutSubmitCount +\n signals.authInputWithoutNameCount,\n );\n recordSourceAudit(summary.authInputHintIssues, relativePath, authInputHintIssueCount);\n }\n\n return summary;\n}\n\nfunction auditProjectStyleContracts(projectRoot: string): StyleAuditSummary {\n const styleFiles = collectProjectStyleFiles(projectRoot);\n const summary: StyleAuditSummary = {\n filesChecked: styleFiles.length,\n focusVisibleSignals: createSourceAuditBucket(),\n reducedMotionSignals: createSourceAuditBucket(),\n };\n\n for (const styleFile of styleFiles) {\n const relativePath = relative(projectRoot, styleFile) || styleFile;\n const css = readFileSync(styleFile, 'utf-8');\n recordSourceAudit(summary.focusVisibleSignals, relativePath, countFocusVisibleSignals(css));\n recordSourceAudit(summary.reducedMotionSignals, relativePath, countReducedMotionSignals(css));\n }\n\n return summary;\n}\n\nfunction buildRegistryContext(projectRoot: string): {\n themeRegistry: Map<string, { modes: string[] }>;\n patternRegistry: Map<string, unknown>;\n} {\n const themeRegistry = new Map<string, { modes: string[] }>();\n const patternRegistry = new Map<string, unknown>();\n const cacheDir = join(projectRoot, '.decantr', 'cache');\n const customDir = join(projectRoot, '.decantr', 'custom');\n\n const cachedThemesDir = join(cacheDir, '@official', 'themes');\n try {\n if (existsSync(cachedThemesDir)) {\n for (const file of readdirSync(cachedThemesDir).filter(\n (name) => name.endsWith('.json') && name !== 'index.json',\n )) {\n const data = JSON.parse(readFileSync(join(cachedThemesDir, file), 'utf-8')) as {\n id?: string;\n modes?: string[];\n };\n if (data.id && !themeRegistry.has(data.id)) {\n themeRegistry.set(data.id, { modes: data.modes || ['light', 'dark'] });\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n const customThemesDir = join(customDir, 'themes');\n try {\n if (existsSync(customThemesDir)) {\n for (const file of readdirSync(customThemesDir).filter((name) => name.endsWith('.json'))) {\n const data = JSON.parse(readFileSync(join(customThemesDir, file), 'utf-8')) as {\n id?: string;\n modes?: string[];\n };\n if (data.id) {\n themeRegistry.set(`custom:${data.id}`, { modes: data.modes || ['light', 'dark'] });\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n const cachedPatternsDir = join(cacheDir, '@official', 'patterns');\n try {\n if (existsSync(cachedPatternsDir)) {\n for (const file of readdirSync(cachedPatternsDir).filter(\n (name) => name.endsWith('.json') && name !== 'index.json',\n )) {\n const data = JSON.parse(readFileSync(join(cachedPatternsDir, file), 'utf-8')) as {\n id?: string;\n };\n if (data.id && !patternRegistry.has(data.id)) {\n patternRegistry.set(data.id, data);\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n for (const id of ['content-section', 'footer', 'form-basic', 'hero', 'nav-header']) {\n if (!patternRegistry.has(id)) {\n patternRegistry.set(id, { id, source: 'bundled' });\n }\n }\n\n return { themeRegistry, patternRegistry };\n}\n\nfunction guardViolationToFinding(violation: GuardViolation): VerificationFinding {\n return {\n id: `guard-${violation.rule}`,\n category: violation.layer === 'dna' ? 'DNA Guard' : 'Blueprint Guard',\n severity: violation.severity === 'error' ? 'error' : 'warn',\n message: violation.message,\n evidence: [`Rule: ${violation.rule}`],\n rule: violation.rule,\n suggestedFix: violation.suggestion,\n };\n}\n\nfunction countPages(essence: EssenceFile | null): number {\n if (!essence) return 0;\n const blueprint = essence.blueprint as {\n pages?: unknown[];\n sections?: Array<{ pages?: unknown[] }>;\n };\n const sectionPages = Array.isArray(blueprint.sections)\n ? blueprint.sections.reduce(\n (sum, section) => sum + (Array.isArray(section.pages) ? section.pages.length : 0),\n 0,\n )\n : 0;\n const flatPages = Array.isArray(blueprint.pages) ? blueprint.pages.length : 0;\n return sectionPages + flatPages;\n}\n\ninterface TopologySummary {\n hasAuthFeature: boolean;\n sectionRoles: string[];\n gatewayRouteCount: number;\n primaryRouteCount: number;\n hasAnonymousEntryRoute: boolean;\n gatewayRoutes: string[];\n primaryRoutes: string[];\n}\n\ninterface SourceAuditBucket {\n count: number;\n files: string[];\n}\n\ninterface SourceAuditSummary {\n filesChecked: number;\n inlineStyles: SourceAuditBucket;\n componentStyleTags: SourceAuditBucket;\n localCssRuntimeSignals: SourceAuditBucket;\n securityRiskPatterns: SourceAuditBucket;\n localhostEndpointSignals: SourceAuditBucket;\n placeholderRoutes: SourceAuditBucket;\n commandPaletteSignals: SourceAuditBucket;\n keyboardShortcutSignals: SourceAuditBucket;\n protectedSurfaceSignals: SourceAuditBucket;\n authProtectedRedirectSignals: SourceAuditBucket;\n authAnonymousRedirectSignals: SourceAuditBucket;\n authOpenRedirectSignals: SourceAuditBucket;\n authExternalRedirectSignals: SourceAuditBucket;\n authProviderStateSignals: SourceAuditBucket;\n authProviderPkceSignals: SourceAuditBucket;\n authProviderNonceSignals: SourceAuditBucket;\n skipNavSignals: SourceAuditBucket;\n skipNavTargetIds: string[];\n mainLandmarkSignals: SourceAuditBucket;\n mainLandmarkIds: string[];\n authEntrySignals: SourceAuditBucket;\n signInFlowSignals: SourceAuditBucket;\n signUpFlowSignals: SourceAuditBucket;\n recoveryFlowSignals: SourceAuditBucket;\n authSessionSignals: SourceAuditBucket;\n authUnauthenticatedBranchSignals: SourceAuditBucket;\n authLoadingSignals: SourceAuditBucket;\n authProtectedLoadingRenderSignals: SourceAuditBucket;\n authBlankLoadingRenderSignals: SourceAuditBucket;\n authAnonymousLoadingRedirectSignals: SourceAuditBucket;\n authProtectedUnauthenticatedRenderSignals: SourceAuditBucket;\n authErrorSignals: SourceAuditBucket;\n authSuccessSignals: SourceAuditBucket;\n authCallbackTokenSignals: SourceAuditBucket;\n authCallbackExchangeSignals: SourceAuditBucket;\n authCallbackExchangeErrorSignals: SourceAuditBucket;\n authCallbackErrorSignals: SourceAuditBucket;\n authCallbackStateSignals: SourceAuditBucket;\n authCallbackStateValidationSignals: SourceAuditBucket;\n authCallbackStateStorageSignals: SourceAuditBucket;\n authCallbackStateStorageClearSignals: SourceAuditBucket;\n authCallbackUrlScrubSignals: SourceAuditBucket;\n authStorageWrites: SourceAuditBucket;\n authStorageClears: SourceAuditBucket;\n authCookieWrites: SourceAuditBucket;\n authCookieClears: SourceAuditBucket;\n authHeaderWrites: SourceAuditBucket;\n authHeaderClears: SourceAuditBucket;\n authCacheClients: SourceAuditBucket;\n authCacheClears: SourceAuditBucket;\n authRefreshSignals: SourceAuditBucket;\n authRefreshClears: SourceAuditBucket;\n authRealtimeSignals: SourceAuditBucket;\n authRealtimeClears: SourceAuditBucket;\n authCoordinationSignals: SourceAuditBucket;\n authCoordinationClears: SourceAuditBucket;\n authGuardSignals: SourceAuditBucket;\n authExitSignals: SourceAuditBucket;\n authSessionTeardownSignals: SourceAuditBucket;\n signInRouteSignals: SourceAuditBucket;\n registrationRouteSignals: SourceAuditBucket;\n recoveryRouteSignals: SourceAuditBucket;\n accessibilityIssues: SourceAuditBucket;\n interactionSafetyIssues: SourceAuditBucket;\n authInputHintIssues: SourceAuditBucket;\n}\n\ninterface StyleAuditSummary {\n filesChecked: number;\n focusVisibleSignals: SourceAuditBucket;\n reducedMotionSignals: SourceAuditBucket;\n}\n\nfunction makeFinding(input: VerificationFinding): VerificationFinding {\n return input;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_000_000) {\n return `${(bytes / 1_000_000).toFixed(2)} MB`;\n }\n if (bytes >= 1_000) {\n return `${Math.round(bytes / 1_000)} KB`;\n }\n return `${bytes} B`;\n}\n\nfunction normalizeRouteHint(route: string | null | undefined): string {\n if (!route || route === '/') return '/';\n const dynamicIndex = route.indexOf('/:');\n if (dynamicIndex !== -1) {\n return route.slice(0, dynamicIndex + 1);\n }\n return route;\n}\n\nfunction isAuthLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:auth|login|log-in|signin|sign-in|signup|sign-up|register|forgot-password|reset-password|password-reset)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction isRecoveryLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:forgot-password|reset-password|password-reset|recover|recovery)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction isSignInLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:auth|login|log-in|signin|sign-in)(?:\\/|$)/i.test(route);\n}\n\nfunction isRegistrationLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:signup|sign-up|register)(?:\\/|$)/i.test(route);\n}\n\nfunction isAnonymousEntryLikeRoute(route: string): boolean {\n return (\n route === '/' ||\n /(?:^|\\/)(?:auth|login|log-in|signin|sign-in|signup|sign-up|register)(?:\\/|$)/i.test(route)\n );\n}\n\nfunction isProtectedLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:app|dashboard|workspace|settings|billing|account|profile|admin|agents?|marketplace|browse|search|listings?|seller|buyer|bookings?|favorites|messages?|orders?|checkout|cart|transparency|logs?|metrics|config|console|studio|pipelines?|projects?|monitoring|overview)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction essenceRequiresFocusVisible(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const accessibility = (dna as { accessibility?: unknown }).accessibility;\n if (!accessibility || typeof accessibility !== 'object') return false;\n return (accessibility as { focus_visible?: unknown }).focus_visible === true;\n}\n\nfunction essenceRequiresReducedMotion(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const motion = (dna as { motion?: unknown }).motion;\n if (!motion || typeof motion !== 'object') return false;\n return (motion as { reduce_motion?: unknown }).reduce_motion === true;\n}\n\nfunction essenceRequiresSkipNav(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const accessibility = (dna as { accessibility?: unknown }).accessibility;\n if (!accessibility || typeof accessibility !== 'object') return false;\n return (accessibility as { skip_nav?: unknown }).skip_nav === true;\n}\n\nexport function extractRouteHintsFromEssence(essence: EssenceFile | null): string[] {\n if (!essence) {\n return ['/'];\n }\n\n const routes = new Set<string>(['/']);\n\n if (isV4(essence)) {\n for (const section of essence.blueprint.sections) {\n for (const page of section.pages) {\n if (typeof page.route === 'string' && page.route.length > 0) {\n routes.add(normalizeRouteHint(page.route));\n }\n }\n }\n\n if (essence.blueprint.routes && typeof essence.blueprint.routes === 'object') {\n for (const route of Object.keys(essence.blueprint.routes)) {\n routes.add(normalizeRouteHint(route));\n }\n }\n }\n\n return [...routes].filter(Boolean).slice(0, 8);\n}\n\nfunction summarizeTopology(\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n): TopologySummary {\n const features = new Set<string>(reviewPack?.data.features ?? []);\n const sectionRoles = new Set<string>();\n const gatewayRoutes = new Set<string>();\n const primaryRoutes = new Set<string>();\n let gatewayRouteCount = 0;\n let primaryRouteCount = 0;\n let hasAnonymousEntryRoute = false;\n\n if (essence && isV4(essence)) {\n for (const feature of essence.blueprint.features ?? []) {\n if (typeof feature === 'string' && feature.length > 0) {\n features.add(feature);\n }\n }\n\n for (const section of essence.blueprint.sections ?? []) {\n const role =\n typeof section.role === 'string' && section.role.length > 0 ? section.role : 'unknown';\n sectionRoles.add(role);\n\n for (const page of section.pages ?? []) {\n if (typeof page.route !== 'string' || page.route.length === 0) continue;\n if (page.route === '/' && (role === 'public' || role === 'gateway')) {\n hasAnonymousEntryRoute = true;\n }\n if (role === 'gateway') {\n gatewayRouteCount += 1;\n gatewayRoutes.add(normalizeRouteHint(page.route));\n }\n if (role === 'primary') {\n primaryRouteCount += 1;\n primaryRoutes.add(normalizeRouteHint(page.route));\n }\n }\n }\n }\n\n return {\n hasAuthFeature: features.has('auth'),\n sectionRoles: [...sectionRoles],\n gatewayRouteCount,\n primaryRouteCount,\n hasAnonymousEntryRoute,\n gatewayRoutes: [...gatewayRoutes],\n primaryRoutes: [...primaryRoutes],\n };\n}\n\nfunction appendTopologyFindings(\n findings: VerificationFinding[],\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n): void {\n const topology = summarizeTopology(essence, reviewPack);\n if (!topology.hasAuthFeature) return;\n const overlappingAuthRoutes = topology.gatewayRoutes.filter((route) =>\n topology.primaryRoutes.includes(route),\n );\n\n if (!topology.sectionRoles.includes('gateway')) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-section-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but the essence topology does not define a gateway section.',\n evidence: [\n 'Expected a gateway section for login, registration, or recovery flows.',\n `Observed section roles: ${topology.sectionRoles.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add a gateway section for authentication flows so anonymous users have a clear entry path before protected routes.',\n }),\n );\n }\n\n if (!topology.sectionRoles.includes('primary')) {\n findings.push(\n makeFinding({\n id: 'auth-primary-section-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but no primary app section was found in the compiled topology.',\n evidence: [`Observed section roles: ${topology.sectionRoles.join(', ') || 'none'}`],\n suggestedFix:\n 'Add a primary section so authenticated users have a clear post-auth destination.',\n }),\n );\n }\n\n if (topology.sectionRoles.includes('gateway') && topology.gatewayRouteCount === 0) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-missing',\n category: 'Route Topology',\n severity: 'warn',\n message: 'A gateway section exists, but none of its pages declare explicit routes.',\n evidence: ['Gateway pages should expose routable login, registration, or recovery paths.'],\n suggestedFix:\n 'Give gateway pages explicit routes such as `/login`, `/register`, or `/forgot-password`.',\n }),\n );\n }\n\n if (topology.primaryRouteCount === 0) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-missing',\n category: 'Route Topology',\n severity: 'warn',\n message: 'Authentication is declared, but no primary section pages expose explicit routes.',\n evidence: [\n 'Protected app surfaces need explicit routes so post-auth entry points are unambiguous.',\n ],\n suggestedFix:\n 'Add explicit primary routes such as `/dashboard`, `/app`, `/browse`, or `/listings` for the authenticated experience.',\n }),\n );\n }\n\n if (\n topology.gatewayRoutes.length > 0 &&\n topology.gatewayRoutes.some((route) => route !== '/' && isProtectedLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-look-protected',\n category: 'Route Topology',\n severity: 'warn',\n message: 'Gateway routes include paths that look like authenticated app destinations.',\n evidence: [`Gateway routes: ${topology.gatewayRoutes.join(', ')}`],\n suggestedFix:\n 'Keep gateway routes focused on anonymous entry flows such as `/`, `/login`, `/register`, or `/forgot-password`, and move protected destinations into the primary section.',\n }),\n );\n }\n\n if (\n topology.gatewayRoutes.length > 0 &&\n topology.gatewayRoutes.every((route) => route !== '/' && !isAuthLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-not-auth-like',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Gateway routes do not appear to expose anonymous entry or authentication-focused destinations.',\n evidence: [`Gateway routes: ${topology.gatewayRoutes.join(', ')}`],\n suggestedFix:\n 'Use gateway routes like `/`, `/login`, `/register`, or `/forgot-password` so the anonymous/auth entry surface is explicit.',\n }),\n );\n }\n\n if (\n topology.primaryRoutes.length > 0 &&\n topology.primaryRoutes.every((route) => isAuthLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-look-auth-only',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Primary routes only expose auth-like destinations and do not appear to include a post-auth application surface.',\n evidence: [`Primary routes: ${topology.primaryRoutes.join(', ')}`],\n suggestedFix:\n 'Keep login and registration routes in the gateway section, and add at least one primary app route such as `/dashboard`, `/workspace`, `/app`, `/browse`, or `/listings`.',\n }),\n );\n }\n\n if (\n topology.primaryRoutes.length > 0 &&\n topology.primaryRoutes.every((route) => !isProtectedLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-not-app-like',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Primary routes do not appear to include a clear post-auth application destination.',\n evidence: [`Primary routes: ${topology.primaryRoutes.join(', ')}`],\n suggestedFix:\n 'Use at least one primary route like `/dashboard`, `/workspace`, `/settings`, `/app`, `/browse`, or `/listings` so the authenticated surface is explicit.',\n }),\n );\n }\n\n if (overlappingAuthRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-primary-route-overlap',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Gateway and primary sections expose overlapping routes, which blurs the anonymous-to-authenticated boundary.',\n evidence: [`Overlapping routes: ${overlappingAuthRoutes.join(', ')}`],\n suggestedFix:\n 'Keep gateway routes focused on anonymous entry flows and reserve primary routes for authenticated destinations so the route boundary stays explicit.',\n }),\n );\n }\n\n if (!topology.hasAnonymousEntryRoute) {\n findings.push(\n makeFinding({\n id: 'auth-entry-route-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but no public or gateway section exposes `/` as an anonymous entry route.',\n evidence: [\n 'Anonymous users should have a stable landing or auth entry route before protected navigation begins.',\n ],\n suggestedFix:\n 'Route `/` to a public landing page or gateway entry so the initial user journey is explicit.',\n }),\n );\n }\n}\n\nasync function runRuntimeAudit(\n projectRoot: string,\n essence: EssenceFile | null,\n): Promise<RuntimeAudit> {\n return auditBuiltDist(projectRoot, {\n routeHints: extractRouteHintsFromEssence(essence),\n });\n}\n\nfunction extractFailedRouteDocuments(runtimeAudit: RuntimeAudit): string[] {\n return runtimeAudit.failures\n .filter((failure) => failure.startsWith('route-document-failed:'))\n .map((failure) => normalizeRouteHint(failure.slice('route-document-failed:'.length)))\n .filter(Boolean);\n}\n\nfunction extractFailedRouteDocumentHardening(runtimeAudit: RuntimeAudit): string[] {\n return runtimeAudit.failures\n .filter((failure) => failure.startsWith('route-document-hardening-failed:'))\n .map((failure) => normalizeRouteHint(failure.slice('route-document-hardening-failed:'.length)))\n .filter(Boolean);\n}\n\nfunction appendRuntimeAuditFindings(\n findings: VerificationFinding[],\n runtimeAudit: RuntimeAudit,\n projectRoot: string,\n topology?: TopologySummary,\n sourceAudit?: SourceAuditSummary,\n): void {\n const distPath = join(projectRoot, 'dist');\n const indexPath = join(distPath, 'index.html');\n const isFrameworkBuildOutput = runtimeAudit.failures.includes('next-build-output');\n\n if (!runtimeAudit.distPresent) {\n findings.push(\n makeFinding({\n id: 'runtime-dist-missing',\n category: 'Runtime Verification',\n severity: 'info',\n message: 'No dist output was found, so runtime smoke verification was skipped.',\n evidence: [distPath],\n suggestedFix:\n 'Build the project before auditing if you want Decantr to verify root, asset, title, and route behavior.',\n }),\n );\n return;\n }\n\n if (!runtimeAudit.indexPresent) {\n findings.push(\n makeFinding({\n id: 'runtime-index-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'dist exists but index.html is missing, so runtime smoke verification could not run.',\n evidence: [indexPath],\n suggestedFix: 'Ensure the current build emits an index.html entry document.',\n }),\n );\n return;\n }\n\n if (runtimeAudit.rootDocumentOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-root-document-invalid',\n category: 'Runtime Verification',\n severity: 'error',\n message: 'The built root document did not expose the expected application mount point.',\n evidence: [indexPath, 'Expected to find an element with id=\"root\" in the served document.'],\n suggestedFix:\n 'Restore the framework mount element and confirm the built entry HTML matches the chosen runtime adapter.',\n }),\n );\n }\n\n if (runtimeAudit.titleOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-title-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing a non-empty <title>.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit a meaningful document title from the entry HTML or framework metadata layer.',\n }),\n );\n }\n\n if (runtimeAudit.langOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-lang-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing an explicit `lang` attribute on `<html>`.',\n evidence: [indexPath],\n suggestedFix:\n 'Set `<html lang=\"en\">` or the appropriate locale in the framework document shell so accessibility tooling and crawlers get the right language hint.',\n }),\n );\n }\n\n if (runtimeAudit.viewportOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-viewport-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing a viewport meta tag.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">` from the entry document or metadata layer.',\n }),\n );\n }\n\n if (runtimeAudit.charsetOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-charset-missing',\n category: 'Document Hardening',\n severity: 'info',\n message: 'The built root document is missing an explicit charset declaration.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit `<meta charset=\"utf-8\">` from the entry document so encoding expectations stay explicit across hosts.',\n }),\n );\n }\n\n if (runtimeAudit.inlineScriptCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-inline-scripts-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Inline `<script>` blocks were detected in the built root document.',\n evidence: [indexPath, `Inline script tags: ${runtimeAudit.inlineScriptCount}`],\n suggestedFix:\n 'Prefer bundled external assets and avoid inline scripts so CSP headers or nonces remain practical.',\n }),\n );\n }\n\n if (runtimeAudit.inlineEventHandlerCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-inline-event-handlers-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Inline DOM event handler attributes were detected in the built root document.',\n evidence: [\n indexPath,\n `Inline event handler attributes: ${runtimeAudit.inlineEventHandlerCount}`,\n ],\n suggestedFix:\n 'Remove inline `onclick`/`onload`-style handlers from built HTML and route behavior through the reviewed application bundle so CSP remains practical.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithoutIntegrityCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-without-integrity',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Remote script tags were detected without Subresource Integrity metadata.',\n evidence: [\n indexPath,\n `Remote scripts missing integrity: ${runtimeAudit.externalScriptsWithoutIntegrityCount}`,\n ],\n suggestedFix:\n 'Pin remote script tags with integrity/crossorigin metadata or serve the dependency through the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithIntegrityMissingCrossoriginCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-crossorigin-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Remote script tags declare Subresource Integrity without a matching `crossorigin` attribute.',\n evidence: [\n indexPath,\n `Remote scripts with integrity but missing crossorigin: ${runtimeAudit.externalScriptsWithIntegrityMissingCrossoriginCount}`,\n ],\n suggestedFix:\n 'Add a reviewed `crossorigin` attribute alongside script integrity metadata so SRI works consistently for remote script fetches.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-insecure-transport',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Remote script tags were detected over plain HTTP.',\n evidence: [\n indexPath,\n `Remote scripts over insecure transport: ${runtimeAudit.externalScriptsWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote scripts over HTTPS with integrity/crossorigin metadata, or move them into the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithoutIntegrityCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-without-integrity',\n category: 'Security Hygiene',\n severity: 'info',\n message: 'Remote stylesheet links were detected without Subresource Integrity metadata.',\n evidence: [\n indexPath,\n `Remote stylesheets missing integrity: ${runtimeAudit.externalStylesheetsWithoutIntegrityCount}`,\n ],\n suggestedFix:\n 'Pin remote stylesheet links with integrity/crossorigin metadata or serve the stylesheet through the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithIntegrityMissingCrossoriginCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-crossorigin-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Remote stylesheet links declare Subresource Integrity without a matching `crossorigin` attribute.',\n evidence: [\n indexPath,\n `Remote stylesheets with integrity but missing crossorigin: ${runtimeAudit.externalStylesheetsWithIntegrityMissingCrossoriginCount}`,\n ],\n suggestedFix:\n 'Add a reviewed `crossorigin` attribute alongside stylesheet integrity metadata so SRI works consistently for remote stylesheet fetches.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-insecure-transport',\n category: 'Security Hygiene',\n severity: 'info',\n message: 'Remote stylesheet links were detected over plain HTTP.',\n evidence: [\n indexPath,\n `Remote stylesheets over insecure transport: ${runtimeAudit.externalStylesheetsWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote stylesheets over HTTPS with integrity/crossorigin metadata, or move them into the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalMediaSourcesWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-media-insecure-transport',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Remote image or media sources were detected over plain HTTP in the built root document.',\n evidence: [\n indexPath,\n `Remote media sources over insecure transport: ${runtimeAudit.externalMediaSourcesWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote image and media sources over HTTPS or move them behind a reviewed trusted asset boundary before shipping.',\n }),\n );\n }\n\n if (runtimeAudit.externalBlankLinksWithoutRelCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-links-noopener-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'External links in the built root document open new tabs without `rel=\"noopener noreferrer\"` protections.',\n evidence: [\n indexPath,\n `External target=\"_blank\" links missing rel protections: ${runtimeAudit.externalBlankLinksWithoutRelCount}`,\n ],\n suggestedFix:\n 'Add `rel=\"noopener noreferrer\"` to built external links that open a new tab so opener access does not survive into production HTML.',\n }),\n );\n }\n\n if (runtimeAudit.externalIframesWithoutSandboxCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-iframes-sandbox-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'External iframe embeds in the built root document are missing a `sandbox` attribute.',\n evidence: [\n indexPath,\n `External iframes without sandbox: ${runtimeAudit.externalIframesWithoutSandboxCount}`,\n ],\n suggestedFix:\n 'Add the narrowest reviewed sandbox policy to external iframes before shipping built HTML.',\n }),\n );\n }\n\n if (runtimeAudit.externalIframesWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-iframes-insecure-transport',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External iframe embeds in the built root document are loaded over plain HTTP.',\n evidence: [\n indexPath,\n `External iframes over insecure transport: ${runtimeAudit.externalIframesWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve embedded iframes over HTTPS or move the integration behind a reviewed trusted boundary before shipping built HTML.',\n }),\n );\n }\n\n if (runtimeAudit.jsEvalSignalCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-js-dynamic-code-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes dynamic code execution markers such as `eval` or `new Function`.',\n evidence: [distPath, `Dynamic code signals in built JS: ${runtimeAudit.jsEvalSignalCount}`],\n suggestedFix:\n 'Remove runtime code evaluation from shipped bundles and replace it with explicit data transforms or static dispatch logic.',\n }),\n );\n }\n\n const hasSourceCorroboration = (sourceAudit?.filesChecked ?? 0) > 0;\n const sourceSecurityCorroborates = (sourceAudit?.securityRiskPatterns.count ?? 0) > 0;\n const sourceLocalhostCorroborates = (sourceAudit?.localhostEndpointSignals.count ?? 0) > 0;\n const htmlInjectionShouldWarn =\n runtimeAudit.jsHtmlInjectionSignalCount > 0 &&\n (!hasSourceCorroboration ||\n sourceSecurityCorroborates ||\n runtimeAudit.jsHtmlInjectionSignalCount >= 25);\n const insecureTransportShouldWarn =\n runtimeAudit.jsInsecureTransportSignalCount > 0 &&\n (!hasSourceCorroboration ||\n sourceSecurityCorroborates ||\n sourceLocalhostCorroborates ||\n runtimeAudit.jsInsecureTransportSignalCount >= 25);\n\n if (htmlInjectionShouldWarn) {\n findings.push(\n makeFinding({\n id: 'runtime-js-html-injection-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes HTML-injection markers such as `innerHTML`, `insertAdjacentHTML`, or `document.write`.',\n evidence: [\n distPath,\n `HTML injection signals in built JS: ${runtimeAudit.jsHtmlInjectionSignalCount}`,\n ],\n suggestedFix:\n 'Prefer explicit DOM node creation or framework-safe rendering paths instead of writing raw HTML into the document at runtime.',\n }),\n );\n }\n\n if (insecureTransportShouldWarn) {\n findings.push(\n makeFinding({\n id: 'runtime-js-insecure-transport-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes insecure transport or localhost-style development endpoint markers.',\n evidence: [\n distPath,\n `Insecure or localhost transport signals in built JS: ${runtimeAudit.jsInsecureTransportSignalCount}`,\n ],\n suggestedFix:\n 'Remove plain HTTP, ws://, and localhost-style endpoints from shipped bundles; prefer HTTPS/WSS and reviewed environment-backed URLs or route transport through a trusted server boundary.',\n }),\n );\n }\n\n if (runtimeAudit.jsSecretSignalCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-js-secret-signals',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'Built JavaScript includes secret-like markers such as service-role keys, live secret keys, or private-key material.',\n evidence: [\n distPath,\n `Secret-like signals in built JS: ${runtimeAudit.jsSecretSignalCount}`,\n ],\n suggestedFix:\n 'Remove server-only secrets from client bundles immediately, rotate any exposed credentials, and keep privileged keys behind a trusted server boundary.',\n }),\n );\n }\n\n if (runtimeAudit.cspSignalOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-csp-signal-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'No document-level Content Security Policy signal was detected in the built root document.',\n evidence: [indexPath],\n suggestedFix:\n 'Prefer a CSP response header, or emit a CSP meta policy for static hosts that cannot add security headers.',\n }),\n );\n }\n\n if (runtimeAudit.assetCount === 0) {\n findings.push(\n makeFinding({\n id: 'runtime-assets-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'No built /assets references were detected in dist/index.html.',\n evidence: [indexPath],\n suggestedFix:\n 'Confirm the production build emitted JS/CSS assets and that index.html points at them.',\n }),\n );\n } else if (runtimeAudit.assetsPassed < runtimeAudit.assetCount) {\n findings.push(\n makeFinding({\n id: 'runtime-assets-fetch-failed',\n category: 'Runtime Verification',\n severity: 'error',\n message: 'One or more built assets could not be fetched from the generated dist output.',\n evidence: [\n `${runtimeAudit.assetsPassed}/${runtimeAudit.assetCount} assets fetched successfully.`,\n ...runtimeAudit.failures.filter((failure) => failure.startsWith('asset-fetch-failed:')),\n ],\n suggestedFix:\n 'Rebuild the project and verify the emitted asset paths and static hosting layout are correct.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeHintsChecked.length > 0 &&\n runtimeAudit.routeHintsMatched < Math.min(2, runtimeAudit.routeHintsChecked.length)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-hints-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'Built JS did not clearly include the expected route hints from the compiled app contract.',\n evidence: [\n `Checked route hints: ${runtimeAudit.routeHintsChecked.join(', ')}`,\n `Matched ${runtimeAudit.routeHintsMatched}/${runtimeAudit.routeHintsChecked.length} route hints in built JS assets.`,\n ],\n suggestedFix:\n 'Verify that route generation still covers the pages declared in the essence and compiled packs.',\n }),\n );\n } else if (\n runtimeAudit.routeHintsChecked.length > 0 &&\n runtimeAudit.routeHintsMatched < runtimeAudit.routeHintsChecked.length\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-hints-partial',\n category: 'Runtime Verification',\n severity: 'info',\n message:\n 'Built JS only reflected part of the expected route contract from the compiled app context.',\n evidence: [\n `Checked route hints: ${runtimeAudit.routeHintsChecked.join(', ')}`,\n `Matched ${runtimeAudit.routeHintsMatched}/${runtimeAudit.routeHintsChecked.length} route hints in built JS assets.`,\n ],\n suggestedFix:\n 'Verify route generation for the missing pages and confirm code-split bundles still preserve the expected route contract.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsPassed < Math.min(2, runtimeAudit.routeDocumentsChecked)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-documents-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more expected routes did not return a valid root document from the built output.',\n evidence: [\n `Passed ${runtimeAudit.routeDocumentsPassed}/${runtimeAudit.routeDocumentsChecked} route document checks.`,\n ...runtimeAudit.failures.filter((failure) =>\n failure.startsWith('route-document-failed:'),\n ),\n ],\n suggestedFix:\n 'Verify route fallbacks and build output so every declared route resolves to a usable root document.',\n }),\n );\n } else if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsPassed < runtimeAudit.routeDocumentsChecked\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-documents-partial',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'Some expected routes resolved to a root document, but at least one still failed runtime verification.',\n evidence: [\n `Passed ${runtimeAudit.routeDocumentsPassed}/${runtimeAudit.routeDocumentsChecked} route document checks.`,\n ...runtimeAudit.failures.filter((failure) =>\n failure.startsWith('route-document-failed:'),\n ),\n ],\n suggestedFix:\n 'Fix the failing route outputs so every declared destination resolves to the same usable root document contract.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsHardenedCount < Math.min(2, runtimeAudit.routeDocumentsChecked)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-document-hardening-missing',\n category: 'Document Hardening',\n severity: 'warn',\n message: 'Too few reviewed routes preserved a fully hardened document shell.',\n evidence: [\n `Hardened route documents: ${runtimeAudit.routeDocumentsHardenedCount}/${runtimeAudit.routeDocumentsChecked}`,\n ...extractFailedRouteDocumentHardening(runtimeAudit),\n ],\n suggestedFix:\n 'Keep title, lang, viewport, and charset metadata intact for every reviewed route document, not just the root entry shell.',\n }),\n );\n } else if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsHardenedCount < runtimeAudit.routeDocumentsChecked\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-document-hardening-partial',\n category: 'Document Hardening',\n severity: 'info',\n message:\n 'Some reviewed routes preserved a hardened document shell, but at least one still dropped critical document metadata.',\n evidence: [\n `Hardened route documents: ${runtimeAudit.routeDocumentsHardenedCount}/${runtimeAudit.routeDocumentsChecked}`,\n ...extractFailedRouteDocumentHardening(runtimeAudit),\n ],\n suggestedFix:\n 'Make sure every reviewed route document keeps title, lang, viewport, and charset metadata intact across route-level rendering.',\n }),\n );\n }\n\n if (topology?.hasAuthFeature) {\n const failedRouteDocuments = new Set(extractFailedRouteDocuments(runtimeAudit));\n const failedGatewayRoutes = topology.gatewayRoutes.filter((route) =>\n failedRouteDocuments.has(normalizeRouteHint(route)),\n );\n const failedPrimaryRoutes = topology.primaryRoutes.filter((route) =>\n failedRouteDocuments.has(normalizeRouteHint(route)),\n );\n\n if (failedGatewayRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-auth-gateway-routes-failed',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more gateway auth routes did not return a valid root document from the built output.',\n evidence: [\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Failed gateway routes: ${failedGatewayRoutes.join(', ')}`,\n ],\n suggestedFix:\n 'Ensure login, registration, and recovery routes resolve to the same usable root document contract as the rest of the app build.',\n }),\n );\n }\n\n if (failedPrimaryRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-auth-primary-routes-failed',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more primary authenticated routes did not return a valid root document from the built output.',\n evidence: [\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n `Failed primary routes: ${failedPrimaryRoutes.join(', ')}`,\n ],\n suggestedFix:\n 'Ensure authenticated app routes like `/dashboard` or `/app` survive the build output and resolve to a valid root document.',\n }),\n );\n }\n }\n\n const largestIsJs =\n typeof runtimeAudit.largestAssetPath === 'string' &&\n runtimeAudit.largestAssetPath.endsWith('.js');\n if (\n !isFrameworkBuildOutput &&\n ((largestIsJs &&\n runtimeAudit.largestAssetBytes > PERFORMANCE_BUDGETS.largestJsAssetWarnBytes) ||\n runtimeAudit.jsAssetBytes > PERFORMANCE_BUDGETS.totalJsWarnBytes)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-js-bundle-large',\n category: 'Performance Budget',\n severity: 'warn',\n message:\n 'The built JavaScript output is larger than the current Decantr performance budget.',\n evidence: [\n `Total JS: ${formatBytes(runtimeAudit.jsAssetBytes)}`,\n `Largest asset: ${runtimeAudit.largestAssetPath ?? 'n/a'} (${formatBytes(runtimeAudit.largestAssetBytes)})`,\n ],\n suggestedFix:\n 'Split large route bundles, remove unnecessary client-only code, and prefer lighter patterns or deferred data surfaces.',\n }),\n );\n }\n\n if (\n !isFrameworkBuildOutput &&\n runtimeAudit.cssAssetBytes > PERFORMANCE_BUDGETS.totalCssWarnBytes\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-css-bundle-large',\n category: 'Performance Budget',\n severity: 'warn',\n message: 'The built CSS output is larger than the current Decantr performance budget.',\n evidence: [\n `Total CSS: ${formatBytes(runtimeAudit.cssAssetBytes)}`,\n `Total assets: ${formatBytes(runtimeAudit.totalAssetBytes)}`,\n ],\n suggestedFix:\n 'Trim unused treatment layers, reduce generated CSS duplication, and prefer scoped styles over broad utility carryover.',\n }),\n );\n }\n\n if (\n !isFrameworkBuildOutput &&\n runtimeAudit.totalAssetBytes > PERFORMANCE_BUDGETS.totalAssetsWarnBytes\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-total-assets-large',\n category: 'Performance Budget',\n severity: 'warn',\n message: 'The built asset payload is larger than the current Decantr total asset budget.',\n evidence: [\n `Total assets: ${formatBytes(runtimeAudit.totalAssetBytes)}`,\n `JS: ${formatBytes(runtimeAudit.jsAssetBytes)}`,\n `CSS: ${formatBytes(runtimeAudit.cssAssetBytes)}`,\n ],\n suggestedFix:\n 'Reduce shipped assets, split infrequently used routes, and keep the showcase/app shell focused on essential interactive surfaces.',\n }),\n );\n }\n}\n\nfunction appendSourceAuditFindings(\n findings: VerificationFinding[],\n sourceAudit: SourceAuditSummary,\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n adoptionMode: string | null,\n): void {\n if (sourceAudit.filesChecked === 0) {\n return;\n }\n\n const isContractOnly = adoptionMode === 'contract-only';\n\n if (sourceAudit.inlineStyles.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-inline-styles-present',\n category: 'Source Audit',\n severity: 'warn',\n message: isContractOnly\n ? 'Source files contain inline style attributes; contract-only projects should route static visual decisions through project-owned styling law.'\n : 'Source files still contain disallowed inline style attributes, which undermines the compiled treatment contract.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.inlineStyles,\n 'Disallowed inline style attributes',\n ),\n suggestedFix: isContractOnly\n ? 'Move static visual styling into the app design system, Tailwind/theme tokens, component variants, or accepted local rules. Keep inline style only for truly dynamic geometry.'\n : 'Move static visual styling into treatments, atoms, or design-token-backed classes. Inline style remains acceptable for Decantr CSS-variable writes and truly dynamic geometry.',\n }),\n );\n }\n\n if (sourceAudit.componentStyleTags.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-component-style-tags-present',\n category: 'Source Audit',\n severity: 'warn',\n message: isContractOnly\n ? 'Source files inject component-scoped style tags or dynamic style elements, which makes project-owned styling rules harder to enforce.'\n : 'Source files inject component-scoped style tags or dynamic style elements, which bypass the compiled Decantr layer contract.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.componentStyleTags,\n 'Component-level style tag signals',\n ),\n suggestedFix: isContractOnly\n ? 'Move shared keyframes, media queries, and visual rules into the project stylesheet, component library, or accepted local pattern/rule manifest.'\n : 'Move shared keyframes, media queries, and visual rules into global.css or treatments.css so styling stays inside the reviewed Decantr layer stack.',\n }),\n );\n }\n\n if (!isContractOnly && sourceAudit.localCssRuntimeSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-local-css-runtime-stub-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files include a local css() runtime or hand-written atoms stylesheet instead of the first-party `@decantr/css` runtime path.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.localCssRuntimeSignals,\n 'Local css() runtime signals',\n ),\n suggestedFix:\n 'Use the real `@decantr/css` runtime for atom classes and remove local `css()` stubs or hand-written `atoms.css` fallbacks unless the project is deliberately running in an explicit fallback mode.',\n }),\n );\n }\n\n if (sourceAudit.securityRiskPatterns.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-security-risk-patterns-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files include security-risk rendering or link patterns before the project is even built.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.securityRiskPatterns,\n 'Security-risk source patterns',\n ),\n suggestedFix:\n 'Remove dangerous HTML writes, client-exposed secret references, localhost/dev endpoints, wildcard postMessage targets, dynamic code execution, and unsafe external link patterns from source before shipping.',\n }),\n );\n }\n\n if (sourceAudit.localhostEndpointSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-localhost-endpoints-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files still reference localhost-style endpoints that will not survive a real production deployment.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.localhostEndpointSignals,\n 'Localhost endpoint signals',\n ),\n suggestedFix:\n 'Replace localhost, 127.0.0.1, or 0.0.0.0 client endpoints with reviewed environment-backed URLs or route them behind a trusted server boundary before shipping.',\n }),\n );\n }\n\n if (sourceAudit.placeholderRoutes.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-placeholder-route-targets-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files still include placeholder navigation targets instead of real app routes.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.placeholderRoutes,\n 'Placeholder route targets',\n ),\n suggestedFix:\n 'Replace placeholder href/to values with the actual routes declared in the compiled packs and essence.',\n }),\n );\n }\n\n const navigation = essence && isV4(essence) ? essence.meta.navigation : null;\n if (navigation?.command_palette && sourceAudit.commandPaletteSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-command-palette-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence declares a command palette, but the source tree does not show an obvious command-palette implementation signal.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Command palette declared in essence navigation.',\n ],\n suggestedFix:\n 'Implement a real command palette surface with its keyboard trigger instead of merely acknowledging the feature in copy or comments.',\n }),\n );\n }\n\n if (navigation?.hotkeys?.length && sourceAudit.keyboardShortcutSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-hotkeys-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence declares hotkeys, but the source tree does not show obvious keyboard-shortcut handling.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Hotkeys declared: ${navigation.hotkeys.length}`,\n ],\n suggestedFix:\n 'Implement the declared hotkeys with real keydown handlers or a reviewed shortcut helper rather than leaving them as documentation-only features.',\n }),\n );\n }\n\n if (sourceAudit.authStorageWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-storage-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files write auth-like credentials into browser storage.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authStorageWrites,\n 'Auth storage writes',\n ),\n suggestedFix:\n 'Avoid storing auth tokens in localStorage/sessionStorage and prefer secure server-managed session boundaries.',\n }),\n );\n }\n\n if (sourceAudit.authCookieWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-cookie-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files write auth-like credentials into client-managed cookies.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authCookieWrites,\n 'Auth cookie writes',\n ),\n suggestedFix:\n 'Avoid setting auth cookies from client-side JavaScript; prefer secure server-issued HttpOnly session cookies or other server-managed boundaries.',\n }),\n );\n }\n\n if (sourceAudit.authHeaderWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-header-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files construct auth-like authorization headers in client-side code.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authHeaderWrites,\n 'Auth header writes',\n ),\n suggestedFix:\n 'Avoid building bearer/session auth headers in client-rendered code; prefer server-managed session boundaries or a deliberate reviewed client-auth strategy.',\n }),\n );\n }\n\n const topology = summarizeTopology(essence, reviewPack);\n if (\n topology.hasAuthFeature &&\n sourceAudit.authStorageWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authStorageClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-storage-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth storage being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth storage write files: ${sourceAudit.authStorageWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth storage clear files: none',\n ],\n suggestedFix:\n 'If auth data is ever stored in browser storage, remove those auth/session keys during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCookieWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authCookieClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-cookie-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth cookies being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth cookie write files: ${sourceAudit.authCookieWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth cookie clear files: none',\n ],\n suggestedFix:\n 'If auth cookies are issued from reviewed source surfaces, explicitly expire or delete them during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authHeaderWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authHeaderClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-header-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth headers being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth header write files: ${sourceAudit.authHeaderWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth header clear files: none',\n ],\n suggestedFix:\n 'If reviewed source code constructs auth-like authorization headers, explicitly delete or reset those header values during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCacheClients.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authCacheClears.count === 0 &&\n (sourceAuditBucketsOverlap(sourceAudit.authCacheClients, sourceAudit.protectedSurfaceSignals) ||\n sourceAuditBucketsOverlap(sourceAudit.authCacheClients, sourceAudit.authSessionSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-cache-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-side data caches being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth cache client files: ${sourceAudit.authCacheClients.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth cache clear files: none',\n ],\n suggestedFix:\n 'If protected data is cached in query clients or client data stores, clear or reset those caches during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authRefreshSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authRefreshSignals, sourceAudit.authRefreshClears)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-refresh-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show background auth refresh timers or subscriptions being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth refresh files: ${sourceAudit.authRefreshSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth refresh clear files: ${sourceAudit.authRefreshClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If auth/session refresh runs on timers or subscriptions, clear those intervals, timeouts, or listeners during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authRealtimeSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authRealtimeSignals, sourceAudit.authRealtimeClears) &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authRealtimeSignals,\n sourceAudit.protectedSurfaceSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authRealtimeSignals, sourceAudit.authSessionSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-realtime-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show realtime channels or sockets being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth realtime files: ${sourceAudit.authRealtimeSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth realtime clear files: ${sourceAudit.authRealtimeClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If protected data arrives over websockets, SSE, or realtime channels, close or unsubscribe those connections during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCoordinationSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.authCoordinationClears,\n ) &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.protectedSurfaceSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.authSessionSignals,\n ))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-coordination-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show cross-tab auth coordination channels or storage listeners being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth coordination files: ${sourceAudit.authCoordinationSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth coordination clear files: ${sourceAudit.authCoordinationClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If auth state is coordinated across tabs with BroadcastChannel or storage listeners, close those channels and remove those listeners during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (topology.hasAuthFeature && sourceAudit.authGuardSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-guard-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared, but the source tree does not show clear auth-guard or redirect behavior.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth guard signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add explicit protected-route wrappers, middleware, session checks, or redirects to login/register before authenticated surfaces render.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.primaryRoutes.length > 0 &&\n sourceAudit.protectedSurfaceSignals.count > 0 &&\n sourceAudit.authGuardSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.protectedSurfaceSignals, sourceAudit.authGuardSignals) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.protectedSurfaceSignals,\n sourceAudit.authSessionSignals,\n ) &&\n !sourceAuditProtectedSurfacesCoveredByGuardedNextLayouts(\n sourceAudit.protectedSurfaceSignals,\n sourceAudit.authGuardSignals,\n topology,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-protected-surface-auth-checks-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Files that expose protected app surfaces do not appear to co-locate session checks or guard behavior.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected surface files: ${sourceAudit.protectedSurfaceSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n `Auth session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Keep protected-route components, layouts, or loaders close to the session check or guard that protects them so authenticated surfaces do not look accidentally public.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProtectedRedirectSignals.count > 0 &&\n sourceAuditBucketsOverlap(\n sourceAudit.authProtectedRedirectSignals,\n sourceAudit.authGuardSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authProtectedRedirectSignals,\n sourceAudit.authEntrySignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-guard-protected-redirect',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth guard logic appears to redirect users toward protected destinations instead of anonymous entry routes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected redirect files: ${sourceAudit.authProtectedRedirectSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Send unauthenticated guard redirects to `/`, `/login`, `/register`, or another reviewed gateway route, and keep redirects to protected destinations for post-auth success flows only.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Source files reference auth/session state but do not show a clear loading or pending state while session resolution happens.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth/session signals: ${sourceAudit.authSessionSignals.count}`,\n `Auth loading signals: ${sourceAudit.authLoadingSignals.count}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When auth or session state resolves asynchronously, render an explicit loading, skeleton, suspense fallback, or pending state before redirecting or rendering protected content.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authProtectedLoadingRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-protected-render',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces show a loading branch, but that branch still appears to render a protected destination while session resolution is pending.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Protected loading render files: ${sourceAudit.authProtectedLoadingRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'While auth/session state is loading, render a neutral spinner, skeleton, suspense fallback, or guard boundary instead of returning a dashboard/app shell before the session is confirmed.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authBlankLoadingRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-blank-render',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth/session loading branches exist, but some of them return nothing instead of an explicit pending boundary.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Blank loading files: ${sourceAudit.authBlankLoadingRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When auth/session state is loading, render a spinner, skeleton, suspense fallback, or another explicit pending UI instead of returning `null` or an empty fragment.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authAnonymousLoadingRedirectSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-anonymous-redirect',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth/session loading branches redirect users to anonymous routes before session resolution finishes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Anonymous loading redirect files: ${sourceAudit.authAnonymousLoadingRedirectSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Do not redirect to `/login`, `/`, or another anonymous route while session state is still loading. Render a pending boundary first, then redirect only after the session resolves as unauthenticated.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n ) &&\n sourceAudit.authProtectedUnauthenticatedRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-protected-render',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces branch on auth loss but still appear to render a protected destination in the unauthenticated branch.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Protected unauthenticated render files: ${sourceAudit.authProtectedUnauthenticatedRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect to a reviewed anonymous route or render a neutral guard boundary instead of returning a dashboard/app shell.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-handling-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces read auth/session state but do not show an explicit unauthenticated branch when session resolution fails or the user signs out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When protected surfaces read session state directly, branch on unauthenticated/null-session cases and redirect to a reviewed anonymous route or return a guard boundary before protected content renders.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authAnonymousRedirectSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-redirect-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces branch on auth loss but do not show an obvious redirect back to an anonymous route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Anonymous redirect files: ${sourceAudit.authAnonymousRedirectSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect users to `/`, `/login`, `/register`, or another reviewed anonymous route instead of returning `null` or leaving the protected shell blank.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authSessionSignals.count > 0 || sourceAudit.authEntrySignals.count > 0) &&\n sourceAudit.authErrorSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-error-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication surfaces do not show an obvious error or failure state for rejected sign-in, session refresh, or recovery flows.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth/session signals: ${sourceAudit.authSessionSignals.count}`,\n `Auth entry signals: ${sourceAudit.authEntrySignals.count}`,\n 'Auth error signals: 0',\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Entry files: ${sourceAudit.authEntrySignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Expose a reviewed error state for failed sign-in, session refresh, or recovery paths with inline feedback, alert messaging, or another explicit failure affordance.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.recoveryFlowSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.recoveryFlowSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-recovery-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Recovery flows exist, but the source tree does not show an obvious success or confirmation state after a reset request completes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Recovery flow signals: ${sourceAudit.recoveryFlowSignals.count}`,\n 'Auth success signals: 0',\n `Recovery files: ${sourceAudit.recoveryFlowSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After password-reset or recovery submission succeeds, show a reviewed confirmation state such as \"check your email\", \"reset link sent\", or another explicit success affordance.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.signUpFlowSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.signUpFlowSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(sourceAudit.signUpFlowSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-registration-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Registration flows exist, but the source tree does not show either a reviewed post-auth transition or an explicit success/verification state.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Registration flow signals: ${sourceAudit.signUpFlowSignals.count}`,\n `Protected auth redirects: ${sourceAudit.authProtectedRedirectSignals.count}`,\n `Auth success signals: ${sourceAudit.authSuccessSignals.count}`,\n `Registration files: ${sourceAudit.signUpFlowSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After registration succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state such as \"account created\" or \"check your email\" before the next auth step.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackStateSignals.count > 0) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authSuccessSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(sourceAudit.authCallbackStateSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback handling exists, but the source tree does not show either a reviewed protected transition or an explicit success state after callback exchange completes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth callback token files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Auth callback state files: ${sourceAudit.authCallbackStateSignals.files.join(', ') || 'none'}`,\n `Protected auth redirects: ${sourceAudit.authProtectedRedirectSignals.count}`,\n `Auth success signals: ${sourceAudit.authSuccessSignals.count}`,\n ],\n suggestedFix:\n 'After callback validation or code exchange succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success/verification state before the next auth step.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackExchangeSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackExchangeSignals,\n sourceAudit.authCallbackExchangeErrorSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-exchange-error-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback exchange logic exists, but the source tree does not show explicit failure handling if the code/session exchange rejects.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth callback exchange files: ${sourceAudit.authCallbackExchangeSignals.files.join(', ') || 'none'}`,\n `Callback exchange error-handling files: ${sourceAudit.authCallbackExchangeErrorSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Wrap callback code/session exchange in reviewed catch handling or explicit exchange-error state so failed callback completion does not strand users on an indefinite pending path.',\n }),\n );\n }\n\n if (topology.hasAuthFeature && sourceAudit.authExitSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication is declared, but the source tree does not show an obvious sign-out or session-exit path.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth exit signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Expose an explicit sign-out/logout flow so authenticated users can intentionally end their session.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.hasAnonymousEntryRoute &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authExitSignals,\n sourceAudit.authAnonymousRedirectSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-redirect-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication exit flows do not show an obvious redirect back to an anonymous entry route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Anonymous redirect files: ${sourceAudit.authAnonymousRedirectSignals.files.join(', ') || 'none'}`,\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After sign-out or session exit, redirect users back to `/`, `/login`, `/register`, or another reviewed anonymous entry route so protected shells do not linger after logout.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authExitSignals, sourceAudit.authSessionTeardownSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication exit flows exist, but the source tree does not show an obvious session teardown or sign-out boundary.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Session teardown files: ${sourceAudit.authSessionTeardownSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Before redirecting users out of the protected shell, explicitly sign out or invalidate the reviewed session state instead of relying on navigation alone.',\n }),\n );\n }\n\n if (sourceAudit.authOpenRedirectSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-open-redirect-risk',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files appear to trust next/returnTo-style redirect parameters during auth or route-transition flows.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authOpenRedirectSignals,\n 'Auth/query redirect signals',\n ),\n suggestedFix:\n 'Resolve post-auth or route-transition redirects through a reviewed allowlist of internal routes instead of redirecting directly from raw `next`, `returnTo`, `callbackUrl`, or similar query parameters.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authExternalRedirectSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.authExitSignals,\n ))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-external-redirect-risk',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files appear to redirect auth-related flows directly to external URLs.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authExternalRedirectSignals,\n 'Auth external redirects',\n ),\n suggestedFix:\n 'Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration instead of hardcoding off-site destinations in app code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderStateSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderStateSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-state-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style auth authorize URLs without a `state` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderStateSignals,\n 'Auth provider URLs missing state',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL, include a reviewed `state` value and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderPkceSignals.count > 0 &&\n (sourceAuditBucketsOverlap(sourceAudit.authProviderPkceSignals, sourceAudit.authEntrySignals) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderPkceSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-pkce-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style OAuth code-flow URLs without a `code_challenge` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderPkceSignals,\n 'Auth provider code flows missing PKCE',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL with `response_type=code`, include a reviewed PKCE `code_challenge` and verifier instead of hardcoding a bare code flow from client code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderNonceSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderNonceSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-nonce-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style OIDC id_token URLs without a `nonce` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderNonceSignals,\n 'Auth provider id_token flows missing nonce',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL that requests `id_token`, include a reviewed `nonce` and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.length === 0 &&\n sourceAudit.authEntrySignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-entry-surface-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared, but the source tree does not show any obvious login, registration, or credential-entry surface.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth entry signals: 0',\n 'Gateway routes: none',\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add an explicit login, registration, recovery, or reviewed SSO entry surface before protected routes become the primary way into the app.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.length > 0 &&\n sourceAudit.authEntrySignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-entry-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared and gateway routes exist, but the source tree does not show an obvious sign-in, registration, or credential-entry surface.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth entry signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add a real login, registration, or recovery surface with credential inputs or explicit auth entry actions on the gateway routes.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isRecoveryLikeRoute(route)) &&\n sourceAudit.signInFlowSignals.count > 0 &&\n sourceAudit.recoveryRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-recovery-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Sign-in surfaces exist and a recovery route is declared, but the source tree does not show an obvious path into that recovery flow.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-in flow files: ${sourceAudit.signInFlowSignals.files.join(', ') || 'none'}`,\n 'Recovery route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link sign-in users to the declared recovery route, such as `/forgot-password` or `/reset-password`, somewhere in the reviewed auth entry surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isRegistrationLikeRoute(route)) &&\n sourceAudit.signInFlowSignals.count > 0 &&\n sourceAudit.registrationRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-registration-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Sign-in surfaces exist and a registration route is declared, but the source tree does not show an obvious path into that registration flow.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-in flow files: ${sourceAudit.signInFlowSignals.files.join(', ') || 'none'}`,\n 'Registration route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link sign-in users to the declared registration route, such as `/register` or `/sign-up`, somewhere in the reviewed auth entry surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isSignInLikeRoute(route)) &&\n (sourceAudit.signUpFlowSignals.count > 0 || sourceAudit.recoveryFlowSignals.count > 0) &&\n sourceAudit.signInRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-signin-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Registration or recovery surfaces exist and a sign-in route is declared, but the source tree does not show an obvious path back into sign-in.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-up flow files: ${sourceAudit.signUpFlowSignals.files.join(', ') || 'none'}`,\n `Recovery flow files: ${sourceAudit.recoveryFlowSignals.files.join(', ') || 'none'}`,\n 'Sign-in route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link registration and recovery users back to the declared sign-in route, such as `/login` or `/sign-in`, somewhere in the reviewed gateway surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.primaryRoutes.length > 0 &&\n (sourceAudit.signInFlowSignals.count > 0 ||\n (sourceAudit.authEntrySignals.count > 0 &&\n sourceAudit.signUpFlowSignals.count === 0 &&\n sourceAudit.recoveryFlowSignals.count === 0)) &&\n sourceAudit.authProtectedRedirectSignals.count === 0 &&\n sourceAudit.authSuccessSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-success-redirect-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication entry surfaces exist, but the source tree does not show an obvious transition into the protected app after success.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth entry signals: ${sourceAudit.authEntrySignals.count}`,\n 'Protected auth redirects: 0',\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After reviewed sign-in, registration, or recovery success, route users into a primary app surface such as `/dashboard`, `/app`, or another protected destination instead of leaving the post-auth transition implicit.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackTokenSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authCallbackErrorSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-error-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback code appears to read provider return data without an obvious failure state for provider-denied or callback error returns.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback token signal files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Callback error-handling signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed auth callback routes can receive provider error returns, branch on `error` or related callback params and show a reviewed failure state before or alongside the post-auth redirect handling.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackStateSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateSignals,\n sourceAudit.authCallbackStateValidationSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-state-validation-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback code reads provider `state` on return but does not show an obvious validation step against a reviewed expected value.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback state signal files: ${sourceAudit.authCallbackStateSignals.files.join(', ') || 'none'}`,\n `Callback state-validation signal files: ${sourceAudit.authCallbackStateValidationSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed auth callback routes read a returned `state`, compare it against a stored or expected reviewed value before exchanging callback codes or continuing session setup.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackStateValidationSignals.count > 0 &&\n sourceAudit.authCallbackStateStorageSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateStorageSignals,\n sourceAudit.authCallbackStateStorageClearSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-state-teardown-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback code appears to validate stored callback `state` but does not show that the stored state key is cleared afterwards.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback state-storage signal files: ${sourceAudit.authCallbackStateStorageSignals.files.join(', ') || 'none'}`,\n `Callback state-clear signal files: ${sourceAudit.authCallbackStateStorageClearSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After validating returned callback `state`, remove the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isSignInLikeRoute(route)) &&\n (((sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackStateSignals.count > 0) &&\n sourceAudit.authCallbackErrorSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackErrorSignals,\n sourceAudit.signInRouteSignals,\n )) ||\n (sourceAudit.authCallbackExchangeSignals.count > 0 &&\n sourceAudit.authCallbackExchangeErrorSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackExchangeErrorSignals,\n sourceAudit.signInRouteSignals,\n )))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-entry-return-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback failure handling exists, but the source tree does not show an obvious path back to the declared sign-in route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback error-handling signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n `Callback exchange error-handling files: ${sourceAudit.authCallbackExchangeErrorSignals.files.join(', ') || 'none'}`,\n `Sign-in route signal files: ${sourceAudit.signInRouteSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed callback handling or callback session exchange fails, link or redirect users back to the declared sign-in route, such as `/login` or `/sign-in`, instead of leaving the callback failure state isolated.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackErrorSignals.count > 0) &&\n sourceAudit.authCallbackUrlScrubSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-url-scrub-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback code appears to read tokens, codes, or provider error params from the URL without scrubbing them back out of browser history.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback token signal files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Callback error signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n 'Callback URL scrub signals: 0',\n ],\n suggestedFix:\n 'After consuming auth callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n }),\n );\n }\n\n if (sourceAudit.accessibilityIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-accessibility-issues-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files contain unlabeled or non-semantic interactive patterns that should be fixed before runtime verification.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.accessibilityIssues,\n 'Accessibility labeling issues',\n ),\n suggestedFix:\n 'Add explicit labels, semantic interactive elements, and missing alt text so accessibility issues do not accumulate across generated screens.',\n }),\n );\n }\n\n if (essenceRequiresSkipNav(essence) && sourceAudit.skipNavSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-skip-nav-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence contract requires skip navigation, but the source tree does not show a skip-link signal.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Skip-nav requirement: true',\n 'Skip-nav signals: 0',\n ],\n suggestedFix:\n 'Add a visible-on-focus skip link such as `Skip to content` that targets the main app landmark before shipping the accessible surface.',\n }),\n );\n }\n\n if (essenceRequiresSkipNav(essence) && sourceAudit.mainLandmarkSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-main-landmark-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence contract requires skip navigation, but the source tree does not show a main landmark for skip-link targeting.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Skip-nav requirement: true',\n 'Main landmark signals: 0',\n ],\n suggestedFix:\n 'Add a `<main>` landmark or a container with `role=\"main\"` so skip navigation lands on a clear primary app region.',\n }),\n );\n }\n\n if (\n essenceRequiresSkipNav(essence) &&\n sourceAudit.skipNavTargetIds.length > 0 &&\n !sourceAudit.skipNavTargetIds.some((targetId) => sourceAudit.mainLandmarkIds.includes(targetId))\n ) {\n findings.push(\n makeFinding({\n id: 'source-skip-nav-target-mismatch',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Skip-link targets do not line up with any detected main landmark id in the source tree.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Skip-nav targets: ${sourceAudit.skipNavTargetIds.join(', ')}`,\n `Main landmark ids: ${sourceAudit.mainLandmarkIds.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Point skip-link href values at the id of the primary `<main>` landmark, or add a matching id to the existing main region.',\n }),\n );\n }\n\n if (sourceAudit.interactionSafetyIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-interaction-safety-issues-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files contain interaction patterns that can trigger accidental submissions or unsafe form behavior.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.interactionSafetyIssues,\n 'Interaction safety issues',\n ),\n suggestedFix:\n 'Give form buttons explicit types so interactive controls do exactly what the compiled task contract intends.',\n }),\n );\n }\n\n if (sourceAudit.authInputHintIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-input-hints-missing',\n category: 'Source Audit',\n severity: 'info',\n message: 'Source auth flows are missing explicit autocomplete hints on credential inputs.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authInputHintIssues,\n 'Missing auth autocomplete hints',\n ),\n suggestedFix:\n 'Add explicit autocomplete values such as `email`, `username`, `current-password`, or `new-password` before auth flows ship.',\n }),\n );\n }\n}\n\nfunction appendStyleContractFindings(\n findings: VerificationFinding[],\n styleAudit: StyleAuditSummary,\n essence: EssenceFile | null,\n): void {\n if (essenceRequiresFocusVisible(essence) && styleAudit.focusVisibleSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'style-focus-visible-signals-missing',\n category: 'Style Contract',\n severity: 'warn',\n message:\n 'The essence contract requires visible focus treatment, but the project styles do not show a focus-visible signal.',\n evidence: [\n `Style files checked: ${styleAudit.filesChecked}`,\n 'Focus-visible requirement: true',\n 'Focus-visible signals: 0',\n ],\n suggestedFix:\n 'Add a clear `:focus-visible` treatment in the project CSS so keyboard focus remains visible across interactive surfaces.',\n }),\n );\n }\n\n if (essenceRequiresReducedMotion(essence) && styleAudit.reducedMotionSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'style-reduced-motion-signals-missing',\n category: 'Style Contract',\n severity: 'info',\n message:\n 'The essence contract requires reduced-motion support, but the project styles do not show a reduced-motion signal.',\n evidence: [\n `Style files checked: ${styleAudit.filesChecked}`,\n 'Reduced-motion requirement: true',\n 'Reduced-motion signals: 0',\n ],\n suggestedFix:\n 'Add a `prefers-reduced-motion: reduce` style path or an equivalent reviewed reduce-motion contract so motion-heavy surfaces can soften or disable non-essential animation.',\n }),\n );\n }\n}\n\nexport async function auditProject(projectRoot: string): Promise<ProjectAuditReport> {\n const essencePath = join(projectRoot, 'decantr.essence.json');\n const findings: VerificationFinding[] = [];\n const reviewPack = loadReviewPack(projectRoot);\n const packManifest = loadPackManifest(projectRoot);\n const adoptionMode = readProjectAdoptionMode(projectRoot);\n const runtimeAudit = emptyRuntimeAudit();\n\n if (!existsSync(essencePath)) {\n findings.push(\n makeFinding({\n id: 'essence-missing',\n category: 'Project Contract',\n severity: 'error',\n message: 'No decantr.essence.json file was found.',\n evidence: [essencePath],\n suggestedFix: 'Run `decantr init` or scaffold the project again so the essence exists.',\n }),\n );\n\n return {\n $schema: VERIFICATION_SCHEMA_URLS.projectAudit,\n projectRoot,\n valid: false,\n essence: null,\n reviewPack,\n packManifest,\n runtimeAudit,\n findings,\n summary: {\n errorCount: 1,\n warnCount: 0,\n infoCount: 0,\n essenceVersion: null,\n reviewPackPresent: Boolean(reviewPack),\n packManifestPresent: Boolean(packManifest),\n runtimeAuditChecked: false,\n runtimePassed: null,\n pageCount: 0,\n },\n };\n }\n\n let essence: EssenceFile | null = null;\n try {\n essence = JSON.parse(readFileSync(essencePath, 'utf-8')) as EssenceFile;\n } catch (error) {\n findings.push(\n makeFinding({\n id: 'essence-parse-error',\n category: 'Project Contract',\n severity: 'error',\n message: `Failed to parse decantr.essence.json: ${(error as Error).message}`,\n evidence: [essencePath],\n suggestedFix: 'Repair the essence JSON before auditing the project.',\n }),\n );\n }\n\n if (essence) {\n const validation = validateEssence(essence);\n if (!validation.valid) {\n for (const issue of validation.errors) {\n findings.push(\n makeFinding({\n id: 'essence-validation',\n category: 'Schema Validation',\n severity: 'error',\n message: issue,\n evidence: [essencePath],\n suggestedFix: 'Resolve the schema violation and rerun `decantr validate`.',\n }),\n );\n }\n } else {\n const { themeRegistry, patternRegistry } = buildRegistryContext(projectRoot);\n for (const violation of evaluateGuard(essence, { themeRegistry, patternRegistry })) {\n findings.push(guardViolationToFinding(violation));\n }\n }\n }\n\n appendTopologyFindings(findings, essence, reviewPack);\n\n if (!packManifest) {\n findings.push(\n makeFinding({\n id: 'pack-manifest-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'Compiled execution pack manifest is missing.',\n evidence: [join(projectRoot, '.decantr', 'context', 'pack-manifest.json')],\n suggestedFix:\n 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate scaffold, review, mutation, section, and page packs.',\n }),\n );\n } else {\n const missingPackFiles = collectMissingPackManifestFiles(projectRoot, packManifest);\n if (missingPackFiles.length > 0) {\n findings.push(\n makeFinding({\n id: 'pack-manifest-referenced-files-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'The compiled execution pack manifest references files that are missing.',\n evidence: missingPackFiles\n .slice(0, 12)\n .map(\n (missing) =>\n `${missing.kind}:${missing.entryId}:${missing.field} -> ${missing.relativePath}`,\n ),\n suggestedFix:\n 'Regenerate or hydrate the full execution pack bundle so every file named by pack-manifest.json exists beside it.',\n }),\n );\n }\n if (!packManifest.scaffold) {\n findings.push(\n makeFinding({\n id: 'scaffold-pack-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'Compiled scaffold pack is missing from the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix: 'Regenerate the context bundle with `decantr refresh`.',\n }),\n );\n }\n if (!packManifest.review) {\n findings.push(\n makeFinding({\n id: 'review-pack-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'Compiled review pack is missing from the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix:\n 'Regenerate the context bundle so critique tasks have a compiled review contract.',\n }),\n );\n }\n if ((packManifest.mutations ?? []).length === 0) {\n findings.push(\n makeFinding({\n id: 'mutation-packs-missing',\n category: 'Execution Packs',\n severity: 'info',\n message: 'No mutation packs were found in the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix:\n 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate mutation task packs.',\n }),\n );\n }\n }\n\n if (!reviewPack) {\n findings.push(\n makeFinding({\n id: 'review-pack-file-missing',\n category: 'Review Contract',\n severity: 'warn',\n message: 'The compiled review pack file is missing.',\n evidence: [join(projectRoot, '.decantr', 'context', 'review-pack.json')],\n suggestedFix:\n 'Hydrate the full hosted context bundle with `decantr registry compile-packs decantr.essence.json --write-context` so critique consumers can anchor findings to the compiled review contract.',\n }),\n );\n }\n\n const sourceAudit = auditProjectSourceTree(projectRoot);\n const styleAudit = auditProjectStyleContracts(projectRoot);\n const checkedRuntimeAudit = await runRuntimeAudit(projectRoot, essence);\n appendRuntimeAuditFindings(\n findings,\n checkedRuntimeAudit,\n projectRoot,\n summarizeTopology(essence, reviewPack),\n sourceAudit,\n );\n appendSourceAuditFindings(findings, sourceAudit, essence, reviewPack, adoptionMode);\n appendStyleContractFindings(findings, styleAudit, essence);\n\n const summary = {\n errorCount: findings.filter((finding) => finding.severity === 'error').length,\n warnCount: findings.filter((finding) => finding.severity === 'warn').length,\n infoCount: findings.filter((finding) => finding.severity === 'info').length,\n essenceVersion: essence ? String(essence.version) : null,\n reviewPackPresent: Boolean(reviewPack),\n packManifestPresent: Boolean(packManifest),\n runtimeAuditChecked: checkedRuntimeAudit.checked,\n runtimePassed: checkedRuntimeAudit.passed,\n pageCount: countPages(essence),\n };\n\n return {\n $schema: VERIFICATION_SCHEMA_URLS.projectAudit,\n projectRoot,\n valid: summary.errorCount === 0,\n essence,\n reviewPack,\n packManifest,\n runtimeAudit: checkedRuntimeAudit,\n findings,\n summary,\n };\n}\n\nfunction buildDecoratorInventory(treatmentsCss: string): string[] {\n const decoratorNames = new Set<string>();\n\n for (\n let index = treatmentsCss.indexOf('.');\n index !== -1;\n index = treatmentsCss.indexOf('.', index + 1)\n ) {\n let cursor = index + 1;\n while (cursor < treatmentsCss.length && isCssClassNameChar(treatmentsCss[cursor]!)) {\n cursor += 1;\n }\n if (cursor === index + 1) continue;\n\n const name = treatmentsCss.slice(index + 1, cursor);\n let whitespaceCursor = cursor;\n while (\n whitespaceCursor < treatmentsCss.length &&\n whitespaceCursor - cursor <= 64 &&\n isCssWhitespace(treatmentsCss[whitespaceCursor]!)\n ) {\n whitespaceCursor += 1;\n }\n\n if (treatmentsCss[whitespaceCursor] === '{') {\n decoratorNames.add(name);\n }\n }\n\n return [...decoratorNames].filter(\n (name) => !name.startsWith('d-') && !PERSONALITY_UTILS.includes(name),\n );\n}\n\nfunction isCssClassNameChar(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n char === '_' ||\n char === '-' ||\n (codePoint >= 48 && codePoint <= 57) ||\n (codePoint >= 65 && codePoint <= 90) ||\n (codePoint >= 97 && codePoint <= 122)\n );\n}\n\nfunction isCssWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r' || char === '\\f';\n}\n\nfunction resolveFocusAreas(reviewPack: ReviewExecutionPack | null): string[] {\n return reviewPack?.data.focusAreas?.length ? reviewPack.data.focusAreas : DEFAULT_FOCUS_AREAS;\n}\n\nfunction resolveSeverityFromChecks(\n reviewPack: ReviewExecutionPack | null,\n fallback: VerificationSeverity,\n checkIds: string[],\n): VerificationSeverity {\n const match = reviewPack?.successChecks.find((check) => checkIds.includes(check.id));\n return match?.severity ?? fallback;\n}\n\nfunction findHardcodedColors(code: string): string[] {\n const matches = [\n ...findHexColors(code),\n ...findColorFunctionCalls(code, 'rgb('),\n ...findColorFunctionCalls(code, 'rgba('),\n ...findColorFunctionCalls(code, 'hsl('),\n ...findColorFunctionCalls(code, 'hsla('),\n ];\n return [...new Set(matches)];\n}\n\nfunction findHexColors(code: string): string[] {\n const matches: string[] = [];\n\n for (let index = 0; index < code.length; index += 1) {\n if (code[index] !== '#') continue;\n\n let cursor = index + 1;\n while (cursor < code.length && cursor - index <= 8 && isHexDigit(code[cursor]!)) {\n cursor += 1;\n }\n\n const length = cursor - index - 1;\n if (length >= 3 && length <= 8 && !isHexDigit(code[cursor] ?? '')) {\n matches.push(code.slice(index, cursor));\n }\n }\n\n return matches;\n}\n\nfunction findColorFunctionCalls(code: string, functionName: string): string[] {\n const matches: string[] = [];\n const lowerCode = code.toLowerCase();\n\n for (\n let index = lowerCode.indexOf(functionName);\n index !== -1;\n index = lowerCode.indexOf(functionName, index + functionName.length)\n ) {\n let cursor = index + functionName.length;\n const maxCursor = Math.min(code.length, cursor + 256);\n while (\n cursor < maxCursor &&\n code[cursor] !== ')' &&\n code[cursor] !== '\\n' &&\n code[cursor] !== '\\r'\n ) {\n cursor += 1;\n }\n if (code[cursor] === ')') {\n matches.push(code.slice(index, cursor + 1));\n }\n }\n\n return matches;\n}\n\nfunction isHexDigit(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n (codePoint >= 48 && codePoint <= 57) ||\n (codePoint >= 65 && codePoint <= 70) ||\n (codePoint >= 97 && codePoint <= 102)\n );\n}\n\nfunction findUtilityFrameworkSignals(code: string): string[] {\n const matches =\n code.match(\n /\\b(?:bg|text|border|shadow|rounded|px|py|mx|my|gap|grid-cols|col-span|row-span|sm|md|lg|xl|hover):[-\\w/.[\\]]+/g,\n ) ?? [];\n return [...new Set(matches)];\n}\n\nfunction countComponentStyleTagSignals(code: string): number {\n const jsxStyleTags = code.match(/<style(?:\\s|>)/gi)?.length ?? 0;\n const dynamicStyleElements = code.match(/document\\.createElement\\((['\"])style\\1\\)/g)?.length ?? 0;\n return jsxStyleTags + dynamicStyleElements;\n}\n\nfunction countCommandPaletteSignals(code: string): number {\n const matches =\n code.match(\n /\\b(?:commandpalette|command palette|cmd\\+k|⌘k|openCommandPalette|setCommandPaletteOpen|paletteOpen|paletteTrigger)\\b/gi,\n ) ?? [];\n return matches.length;\n}\n\nfunction countKeyboardShortcutSignals(code: string): number {\n const matches =\n code.match(/\\b(?:keydown|keyup|metaKey|ctrlKey|altKey|shiftKey|hotkey|shortcut)\\b/gi) ?? [];\n return matches.length;\n}\n\ninterface AstCritiqueSignals {\n inlineStyleAttributeCount: number;\n dangerousHtmlCount: number;\n rawHtmlInjectionCount: number;\n dynamicEvalCount: number;\n hardcodedSecretSignalCount: number;\n clientSecretEnvReferenceCount: number;\n localhostEndpointCount: number;\n wildcardPostMessageCount: number;\n windowOpenWithoutNoopenerCount: number;\n messageListenerWithoutOriginCheckCount: number;\n externalIframeWithoutSandboxCount: number;\n insecureExternalIframeCount: number;\n insecureFormActionCount: number;\n insecureAuthFormMethodCount: number;\n insecureTransportEndpointCount: number;\n iconOnlyButtonWithoutLabelCount: number;\n iconOnlyLinkWithoutLabelCount: number;\n clickableNonSemanticCount: number;\n imageWithoutAltCount: number;\n insecureExternalImageCount: number;\n iframeWithoutTitleCount: number;\n dialogWithoutLabelCount: number;\n dialogWithoutModalHintCount: number;\n tableWithoutHeaderCount: number;\n tableWithoutCaptionCount: number;\n unlabeledNavigationLandmarkCount: number;\n multipleMainLandmarkCount: number;\n externalBlankLinkWithoutRelCount: number;\n formControlWithoutLabelCount: number;\n placeholderNavigationTargetCount: number;\n protectedSurfaceSignalCount: number;\n skipNavSignalCount: number;\n skipNavTargetIds: string[];\n mainLandmarkCount: number;\n mainLandmarkIds: string[];\n emailAutocompleteMissingCount: number;\n passwordAutocompleteMissingCount: number;\n otpAutocompleteMissingCount: number;\n authAutocompleteDisabledCount: number;\n authAutocompleteSemanticMismatchCount: number;\n authInputTypeMismatchCount: number;\n authInputWithoutNameCount: number;\n buttonInFormWithoutTypeCount: number;\n authFormWithoutSubmitCount: number;\n authEntrySignalCount: number;\n authSessionSignalCount: number;\n authLoadingSignalCount: number;\n authProtectedLoadingRenderCount: number;\n authBlankLoadingRenderCount: number;\n authAnonymousLoadingRedirectCount: number;\n authProtectedUnauthenticatedRenderCount: number;\n authProtectedRedirectSignalCount: number;\n authAnonymousRedirectSignalCount: number;\n authOpenRedirectSignalCount: number;\n authExternalRedirectSignalCount: number;\n authProviderStateMissingCount: number;\n authProviderPkceMissingCount: number;\n authProviderNonceMissingCount: number;\n authStorageWriteCount: number;\n authStorageClearCount: number;\n authCookieWriteCount: number;\n authCookieClearCount: number;\n authCookieMissingHardeningCount: number;\n authHeaderWriteCount: number;\n authHeaderClearCount: number;\n authCacheClientCount: number;\n authCacheClearCount: number;\n authRefreshSignalCount: number;\n authRefreshClearCount: number;\n authGuardSignalCount: number;\n authExitSignalCount: number;\n authSessionTeardownSignalCount: number;\n}\n\nfunction getScriptKind(filePath: string): ts.ScriptKind {\n switch (extname(filePath).toLowerCase()) {\n case '.tsx':\n return ts.ScriptKind.TSX;\n case '.jsx':\n return ts.ScriptKind.JSX;\n case '.ts':\n return ts.ScriptKind.TS;\n case '.js':\n return ts.ScriptKind.JS;\n default:\n return ts.ScriptKind.TSX;\n }\n}\n\nfunction isPropertyNamed(node: ts.Node | undefined, ...names: string[]): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) {\n return names.includes(node.text);\n }\n if (ts.isPrivateIdentifier(node)) {\n return names.includes(node.text);\n }\n if (ts.isStringLiteral(node)) {\n return names.includes(node.text);\n }\n return false;\n}\n\nfunction getJsxAttribute(\n attributes: ts.JsxAttributes,\n ...names: string[]\n): ts.JsxAttribute | undefined {\n return attributes.properties.find(\n (property): property is ts.JsxAttribute =>\n ts.isJsxAttribute(property) && isPropertyNamed(property.name, ...names),\n );\n}\n\nfunction getJsxTagName(node: ts.JsxOpeningLikeElement): string | null {\n if (ts.isIdentifier(node.tagName)) {\n return node.tagName.text;\n }\n if (ts.isPropertyAccessExpression(node.tagName)) {\n return node.tagName.name.text;\n }\n return null;\n}\n\nfunction getJsxAttributeLiteralValue(attribute: ts.JsxAttribute | undefined): string | null {\n if (!attribute?.initializer) return null;\n if (ts.isStringLiteral(attribute.initializer)) {\n return attribute.initializer.text;\n }\n if (ts.isJsxExpression(attribute.initializer)) {\n const expression = attribute.initializer.expression;\n if (!expression) return '';\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.text;\n }\n }\n return null;\n}\n\nfunction getJsxTextContent(node: ts.Node): string {\n if (ts.isJsxText(node)) {\n return node.getText();\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text;\n }\n if (ts.isJsxExpression(node)) {\n return node.expression ? getJsxTextContent(node.expression) : '';\n }\n if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) {\n return '';\n }\n if (ts.isJsxElement(node) || ts.isJsxFragment(node)) {\n return node.children.map((child) => getJsxTextContent(child)).join('');\n }\n\n let text = '';\n node.forEachChild((child) => {\n text += getJsxTextContent(child);\n });\n return text;\n}\n\nfunction hasAccessibleLabel(attributes: ts.JsxAttributes, textContent: string): boolean {\n return Boolean(\n getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title') ||\n textContent.trim().length > 0,\n );\n}\n\nfunction isNonSemanticInteractiveTag(tagName: string | null): boolean {\n return ['div', 'span', 'section', 'article', 'li'].includes(tagName ?? '');\n}\n\nfunction collectLabelForIds(root: ts.Node): Set<string> {\n const ids = new Set<string>();\n\n const walk = (node: ts.Node) => {\n if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) {\n const tagName = getJsxTagName(node);\n if (tagName === 'label') {\n const htmlForValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.attributes, 'htmlFor', 'for'),\n );\n if (htmlForValue) {\n ids.add(htmlForValue);\n }\n }\n }\n\n ts.forEachChild(node, walk);\n };\n\n walk(root);\n return ids;\n}\n\nfunction isWrappedInJsxLabel(node: ts.Node): boolean {\n let current: ts.Node | undefined = node.parent;\n while (current) {\n if (ts.isJsxElement(current) && getJsxTagName(current.openingElement) === 'label') {\n return true;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction hasAncestorJsxTag(node: ts.Node, tagName: string): boolean {\n let current: ts.Node | undefined = node.parent;\n while (current) {\n if (ts.isJsxElement(current) && getJsxTagName(current.openingElement) === tagName) {\n return true;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction isLabelableFormControl(tagName: string | null, attributes: ts.JsxAttributes): boolean {\n if (!tagName) return false;\n if (tagName === 'select' || tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n\n const inputType = (\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'type')) ?? 'text'\n ).toLowerCase();\n return !['hidden', 'submit', 'reset', 'button'].includes(inputType);\n}\n\nfunction getNormalizedInputType(attributes: ts.JsxAttributes): string {\n return (getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'type')) ?? 'text')\n .trim()\n .toLowerCase();\n}\n\nfunction hasFormControlLabel(\n node: ts.Node,\n tagName: string | null,\n attributes: ts.JsxAttributes,\n labelForIds: Set<string>,\n textContent: string,\n): boolean {\n if (!isLabelableFormControl(tagName, attributes)) return true;\n if (hasAccessibleLabel(attributes, textContent)) return true;\n if (isWrappedInJsxLabel(node)) return true;\n\n const idValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id'));\n return Boolean(idValue && labelForIds.has(idValue));\n}\n\nfunction isExternalLinkTargetBlankWithoutRel(attributes: ts.JsxAttributes): boolean {\n const targetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'target'));\n if (targetValue !== '_blank') return false;\n\n const hrefValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!hrefValue || !/^(?:https?:)?\\/\\//i.test(hrefValue)) return false;\n\n const relValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'rel')) ?? '';\n return !/\\bnoopener\\b/i.test(relValue) || !/\\bnoreferrer\\b/i.test(relValue);\n}\n\nfunction isLinkLikeTag(tagName: string | null): boolean {\n return tagName === 'a' || tagName === 'Link' || tagName === 'NavLink';\n}\n\nfunction valueContainsInsecureRemoteAsset(value: string | null): boolean {\n if (!value) return false;\n return value\n .split(',')\n .map((candidate) => candidate.trim().split(/\\s+/)[0] ?? '')\n .some((candidate) => /^http:\\/\\//i.test(candidate));\n}\n\nfunction isInsecureExternalImage(attributes: ts.JsxAttributes): boolean {\n const srcValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'src'));\n const srcSetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'srcSet', 'srcset'));\n return (\n valueContainsInsecureRemoteAsset(srcValue) || valueContainsInsecureRemoteAsset(srcSetValue)\n );\n}\n\nfunction isInsecureExternalUrl(value: string | null): boolean {\n return /^http:\\/\\//i.test(value?.trim() ?? '');\n}\n\nfunction isImageLikeTag(tagName: string | null): boolean {\n return tagName === 'img' || tagName === 'Image';\n}\n\nfunction isImageSourceLikeTag(tagName: string | null): boolean {\n return isImageLikeTag(tagName) || tagName === 'source';\n}\n\nfunction isDialogLikeElement(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'dialog') return true;\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'))\n ?.trim()\n .toLowerCase();\n return roleValue === 'dialog' || roleValue === 'alertdialog';\n}\n\nfunction hasDialogLabel(attributes: ts.JsxAttributes): boolean {\n return Boolean(getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title'));\n}\n\nfunction hasDialogModalHint(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'dialog' && getJsxAttribute(attributes, 'open')) {\n return true;\n }\n const modalValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'aria-modal'))\n ?.trim()\n .toLowerCase();\n return modalValue === 'true';\n}\n\nfunction isNavigationLandmark(tagName: string | null, attributes: ts.JsxAttributes): boolean {\n if (tagName === 'nav') return true;\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'))\n ?.trim()\n .toLowerCase();\n return roleValue === 'navigation';\n}\n\nfunction hasNavigationLabel(attributes: ts.JsxAttributes): boolean {\n return Boolean(getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title'));\n}\n\nfunction getJsxAttributeOwner(\n attribute: ts.JsxAttribute,\n): ts.JsxOpeningElement | ts.JsxSelfClosingElement | null {\n const attributes = attribute.parent;\n if (!attributes || !ts.isJsxAttributes(attributes)) return null;\n const owner = attributes.parent;\n if (ts.isJsxOpeningElement(owner) || ts.isJsxSelfClosingElement(owner)) {\n return owner;\n }\n return null;\n}\n\nfunction isSafeJsonLdDangerouslySetInnerHtml(attribute: ts.JsxAttribute): boolean {\n const owner = getJsxAttributeOwner(attribute);\n if (!owner || getJsxTagName(owner) !== 'script') return false;\n\n const typeValue = getJsxAttributeLiteralValue(getJsxAttribute(owner.attributes, 'type'))\n ?.trim()\n .toLowerCase();\n if (typeValue !== 'application/ld+json') return false;\n\n const sourceText = attribute.getText();\n return /\\bJSON\\.stringify\\s*\\(/.test(sourceText) && /\\\\u003c/i.test(sourceText);\n}\n\nfunction hasInsecureFormAction(attributes: ts.JsxAttributes): boolean {\n const actionValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'action'));\n const normalized = actionValue?.trim().toLowerCase() ?? '';\n return (\n /^http:\\/\\//i.test(normalized) ||\n /^javascript:/i.test(normalized) ||\n /^mailto:/i.test(normalized) ||\n /^data:/i.test(normalized)\n );\n}\n\nfunction isAuthLikeInputAttributes(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n if (inputType === 'email' || inputType === 'password') {\n return true;\n }\n\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n return (\n ['email', 'username', 'current-password', 'new-password', 'one-time-code'].includes(\n autocompleteValue ?? '',\n ) || isOtpLikeInputAttributes(attributes)\n );\n}\n\nfunction getInputIdentityText(attributes: ts.JsxAttributes): string {\n return [\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'name')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'placeholder')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'aria-label')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'autocomplete', 'autoComplete')),\n ]\n .filter((value): value is string => Boolean(value))\n .join(' ')\n .toLowerCase();\n}\n\nfunction isOtpLikeInputAttributes(attributes: ts.JsxAttributes): boolean {\n const identityText = getInputIdentityText(attributes);\n if (!identityText) return false;\n return /(?:one[- ]time|otp|verification(?:[-_ ]?code)?|authenticator|2fa|mfa|totp|passcode)/i.test(\n identityText,\n );\n}\n\nfunction hasOtpAutocompleteIssue(attributes: ts.JsxAttributes): boolean {\n if (!isOtpLikeInputAttributes(attributes)) return false;\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n return autocompleteValue !== 'one-time-code';\n}\n\nfunction hasAuthInputTypeMismatch(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const nameValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'name'))\n ?.trim()\n .toLowerCase();\n\n const looksLikePasswordField =\n autocompleteValue === 'current-password' ||\n autocompleteValue === 'new-password' ||\n /password|passcode|pin/.test(nameValue ?? '');\n if (looksLikePasswordField && inputType !== 'password') {\n return true;\n }\n\n const looksLikeEmailField =\n autocompleteValue === 'email' || /(?:^|[-_])(email|e-mail)(?:$|[-_])/.test(nameValue ?? '');\n if (looksLikeEmailField && inputType !== 'email') {\n return true;\n }\n\n return false;\n}\n\nfunction hasAuthAutocompleteSemanticMismatch(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n\n if (!autocompleteValue) return false;\n\n if (inputType === 'password') {\n return !['current-password', 'new-password'].includes(autocompleteValue);\n }\n\n if (inputType === 'email') {\n return !['email', 'username'].includes(autocompleteValue);\n }\n\n return false;\n}\n\nfunction jsxTreeContainsAuthInput(node: ts.Node): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName === 'input' && isAuthLikeInputAttributes(current.attributes)) {\n found = true;\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName === 'input' && isAuthLikeInputAttributes(current.openingElement.attributes)) {\n found = true;\n return;\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction hasInsecureAuthFormMethod(node: ts.JsxElement): boolean {\n if (!jsxTreeContainsAuthInput(node)) return false;\n const methodValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.openingElement.attributes, 'method'),\n );\n if (!methodValue) return true;\n return methodValue.trim().toLowerCase() === 'get';\n}\n\nfunction jsxTreeHasSubmitControl(node: ts.Node): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName === 'button') {\n const typeValue = getJsxAttributeLiteralValue(getJsxAttribute(current.attributes, 'type'))\n ?.trim()\n .toLowerCase();\n if (!typeValue || typeValue === 'submit') {\n found = true;\n }\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(current.attributes);\n if (inputType === 'submit') {\n found = true;\n }\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName === 'button') {\n const typeValue = getJsxAttributeLiteralValue(\n getJsxAttribute(current.openingElement.attributes, 'type'),\n )\n ?.trim()\n .toLowerCase();\n if (!typeValue || typeValue === 'submit') {\n found = true;\n return;\n }\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(current.openingElement.attributes);\n if (inputType === 'submit') {\n found = true;\n return;\n }\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction jsxTreeHasTag(node: ts.Node, tagNames: string[]): boolean {\n let found = false;\n const wanted = new Set(tagNames);\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName && wanted.has(tagName)) {\n found = true;\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName && wanted.has(tagName)) {\n found = true;\n return;\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction hasAuthFormWithoutSubmitControl(node: ts.JsxElement): boolean {\n return jsxTreeContainsAuthInput(node) && !jsxTreeHasSubmitControl(node);\n}\n\nfunction getExpressionLiteralValue(expression: ts.Expression | undefined): string | null {\n if (!expression) return null;\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.text;\n }\n if (ts.isParenthesizedExpression(expression)) {\n return getExpressionLiteralValue(expression.expression);\n }\n if (ts.isAsExpression(expression) || ts.isTypeAssertionExpression(expression)) {\n return getExpressionLiteralValue(expression.expression);\n }\n return null;\n}\n\nfunction getObjectLiteralStringPropertyValue(\n expression: ts.Expression | undefined,\n ...propertyNames: string[]\n): string | null {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return null;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !propertyNames.includes(propertyName)) continue;\n const value = getExpressionLiteralValue(property.initializer);\n if (value) return value;\n }\n return null;\n}\n\nfunction getObjectLiteralBooleanPropertyValue(\n expression: ts.Expression | undefined,\n ...propertyNames: string[]\n): boolean | null {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return null;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !propertyNames.includes(propertyName)) continue;\n if (property.initializer.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (property.initializer.kind === ts.SyntaxKind.FalseKeyword) return false;\n }\n return null;\n}\n\nfunction collectNamedFunctionLikeDeclarations(\n root: ts.Node,\n): Map<string, ts.FunctionLikeDeclarationBase> {\n const declarations = new Map<string, ts.FunctionLikeDeclarationBase>();\n\n const visit = (node: ts.Node): void => {\n if (ts.isFunctionDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n declarations.set(node.name.text, node);\n }\n\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n if (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer)) {\n declarations.set(node.name.text, node.initializer);\n }\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return declarations;\n}\n\nconst namedFunctionLikeDeclarationCache = new WeakMap<\n ts.SourceFile,\n Map<string, ts.FunctionLikeDeclarationBase>\n>();\n\nfunction getCachedNamedFunctionLikeDeclarations(\n sourceFile: ts.SourceFile,\n): Map<string, ts.FunctionLikeDeclarationBase> {\n const cached = namedFunctionLikeDeclarationCache.get(sourceFile);\n if (cached) return cached;\n const declarations = collectNamedFunctionLikeDeclarations(sourceFile);\n namedFunctionLikeDeclarationCache.set(sourceFile, declarations);\n return declarations;\n}\n\nfunction collectNamedExpressionInitializers(root: ts.Node): Map<string, ts.Expression> {\n const initializers = new Map<string, ts.Expression>();\n\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n initializers.set(node.name.text, node.initializer);\n }\n\n if (ts.isVariableDeclaration(node) && ts.isArrayBindingPattern(node.name) && node.initializer) {\n const firstElement = node.name.elements[0];\n if (\n firstElement &&\n !ts.isOmittedExpression(firstElement) &&\n ts.isBindingElement(firstElement) &&\n ts.isIdentifier(firstElement.name)\n ) {\n initializers.set(firstElement.name.text, node.initializer);\n }\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return initializers;\n}\n\ninterface NamedPropertyAlias {\n initializer?: ts.Expression;\n propertyName: string;\n propertyPath: string[];\n}\n\nfunction getPropertyNameText(name: ts.PropertyName | ts.BindingName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction collectNamedPropertyAliases(root: ts.Node): Map<string, NamedPropertyAlias> {\n const aliases = new Map<string, NamedPropertyAlias>();\n\n const collectFromBindingPattern = (\n pattern: ts.ObjectBindingPattern,\n initializer: ts.Expression | undefined,\n propertyPath: string[],\n ): void => {\n for (const element of pattern.elements) {\n if (element.dotDotDotToken) continue;\n const propertyName =\n getPropertyNameText(element.propertyName) ?? getPropertyNameText(element.name);\n if (!propertyName) continue;\n const nextPath = [...propertyPath, propertyName];\n if (ts.isIdentifier(element.name)) {\n aliases.set(element.name.text, { initializer, propertyName, propertyPath: nextPath });\n continue;\n }\n if (ts.isObjectBindingPattern(element.name)) {\n collectFromBindingPattern(element.name, initializer, nextPath);\n }\n }\n };\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n ts.isObjectBindingPattern(node.name) &&\n node.initializer\n ) {\n collectFromBindingPattern(node.name, node.initializer, []);\n }\n\n if (ts.isParameter(node) && ts.isObjectBindingPattern(node.name)) {\n collectFromBindingPattern(node.name, undefined, []);\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return aliases;\n}\n\nfunction resolveFunctionLikeHandler(\n expression: ts.Expression | undefined,\n namedFunctions: Map<string, ts.FunctionLikeDeclarationBase>,\n): ts.FunctionLikeDeclarationBase | null {\n if (!expression) return null;\n if (ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)) {\n return expression;\n }\n if (ts.isIdentifier(expression)) {\n return namedFunctions.get(expression.text) ?? null;\n }\n return null;\n}\n\nfunction getFunctionLikeReturnExpressions(node: ts.FunctionLikeDeclarationBase): ts.Expression[] {\n if (ts.isArrowFunction(node) && !ts.isBlock(node.body)) {\n return [node.body];\n }\n\n const body = node.body;\n if (!body || !ts.isBlock(body)) {\n return [];\n }\n\n const expressions: ts.Expression[] = [];\n const visit = (current: ts.Node): void => {\n if (\n current !== body &&\n (ts.isFunctionDeclaration(current) ||\n ts.isFunctionExpression(current) ||\n ts.isArrowFunction(current) ||\n ts.isMethodDeclaration(current) ||\n ts.isGetAccessorDeclaration(current) ||\n ts.isSetAccessorDeclaration(current) ||\n ts.isConstructorDeclaration(current))\n ) {\n return;\n }\n\n if (ts.isReturnStatement(current) && current.expression) {\n expressions.push(current.expression);\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(body);\n return expressions;\n}\n\nfunction getFunctionLikeCacheKey(node: ts.FunctionLikeDeclarationBase): string {\n return `${node.pos}:${node.end}`;\n}\n\nfunction bindFunctionLikeArguments(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n namedExpressions: Map<string, ts.Expression>,\n): Map<string, ts.Expression> {\n const boundExpressions = new Map(namedExpressions);\n\n functionLike.parameters.forEach((parameter, index) => {\n const argument = args[index];\n if (!argument || !ts.isIdentifier(parameter.name)) return;\n boundExpressions.set(parameter.name.text, argument);\n });\n\n return boundExpressions;\n}\n\nfunction getMemberAccessPropertyName(expression: ts.Expression | undefined): string | null {\n if (!expression || !isMemberAccessExpression(expression)) return null;\n if (isPropertyLikeAccessExpression(expression)) {\n return expression.name.text;\n }\n return getExpressionLiteralValue(expression.argumentExpression);\n}\n\ninterface ResolvedObjectLiteralExpression {\n namedExpressions: Map<string, ts.Expression>;\n objectLiteral: ts.ObjectLiteralExpression;\n}\n\ninterface ResolvedTrackedFunctionLike {\n functionLike: ts.FunctionLikeDeclarationBase;\n namedExpressions: Map<string, ts.Expression>;\n}\n\nfunction getObjectLiteralPropertyExpression(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string,\n namedExpressions: Map<string, ts.Expression>,\n): ts.Expression | null {\n for (const property of objectLiteral.properties) {\n if (ts.isPropertyAssignment(property) && getPropertyNameText(property.name) === propertyName) {\n return property.initializer;\n }\n\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === propertyName) {\n return namedExpressions.get(property.name.text) ?? null;\n }\n }\n\n return null;\n}\n\nconst MAX_OPEN_REDIRECT_RESOLUTION_DEPTH = 40;\n\nfunction resolveObjectLiteralExpressionAtPropertyPath(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n propertyPath: string[],\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n let resolvedObjectLiteral = resolveObjectLiteralExpression(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n\n for (const propertyName of propertyPath) {\n const propertyExpression = getObjectLiteralPropertyExpression(\n resolvedObjectLiteral.objectLiteral,\n propertyName,\n resolvedObjectLiteral.namedExpressions,\n );\n if (!propertyExpression) return null;\n resolvedObjectLiteral = resolveObjectLiteralExpression(\n propertyExpression,\n sourceFile,\n resolvedObjectLiteral.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n }\n\n return resolvedObjectLiteral;\n}\n\nfunction resolveReturnedObjectLiteralExpression(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n const functionKey = getFunctionLikeCacheKey(functionLike);\n if (seenFunctions.has(functionKey)) return null;\n\n seenFunctions.add(functionKey);\n const boundExpressions = bindFunctionLikeArguments(functionLike, args, namedExpressions);\n for (const returnExpression of getFunctionLikeReturnExpressions(functionLike)) {\n const objectLiteral = resolveObjectLiteralExpression(\n returnExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (objectLiteral) {\n seenFunctions.delete(functionKey);\n return objectLiteral;\n }\n }\n\n seenFunctions.delete(functionKey);\n return null;\n}\n\nfunction resolveObjectLiteralExpression(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string> = new Set(),\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (!expression) return null;\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return resolveObjectLiteralExpression(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (ts.isObjectLiteralExpression(expression)) {\n return { objectLiteral: expression, namedExpressions };\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return null;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = resolveObjectLiteralExpression(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return null;\n\n seenIdentifiers.add(expression.text);\n const result = resolveObjectLiteralExpressionAtPropertyPath(\n propertyAlias.initializer,\n sourceFile,\n propertyAlias.propertyPath,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!functionResolution) return null;\n return resolveReturnedObjectLiteralExpression(\n functionResolution.functionLike,\n expression.arguments,\n sourceFile,\n functionResolution.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (isMemberAccessExpression(expression)) {\n const propertyName = getMemberAccessPropertyName(expression);\n if (!propertyName) return null;\n return resolveObjectLiteralExpressionAtPropertyPath(\n expression.expression,\n sourceFile,\n [propertyName],\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n return null;\n}\n\nfunction findFunctionLikeOnObjectLiteral(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string,\n namedFunctions: Map<string, ts.FunctionLikeDeclarationBase>,\n): ts.FunctionLikeDeclarationBase | null {\n for (const property of objectLiteral.properties) {\n if (ts.isMethodDeclaration(property) && getPropertyNameText(property.name) === propertyName) {\n return property;\n }\n\n if (ts.isPropertyAssignment(property) && getPropertyNameText(property.name) === propertyName) {\n return resolveFunctionLikeHandler(property.initializer, namedFunctions);\n }\n\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === propertyName) {\n return namedFunctions.get(property.name.text) ?? null;\n }\n }\n\n return null;\n}\n\nfunction resolveReturnedTrackedFunctionLike(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedTrackedFunctionLike | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n const functionKey = getFunctionLikeCacheKey(functionLike);\n if (seenFunctions.has(functionKey)) return null;\n\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n const boundExpressions = bindFunctionLikeArguments(functionLike, args, namedExpressions);\n for (const returnExpression of getFunctionLikeReturnExpressions(functionLike)) {\n const result = resolveTrackedOpenRedirectFunctionLike(\n returnExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n nextSeenFunctions,\n depth + 1,\n );\n if (result) return result;\n }\n\n return null;\n}\n\nfunction resolveTrackedOpenRedirectFunctionLike(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string> = new Set(),\n depth = 0,\n): ResolvedTrackedFunctionLike | null {\n if (!expression) return null;\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n\n const namedFunctions = getCachedNamedFunctionLikeDeclarations(sourceFile);\n const directFunctionLike = resolveFunctionLikeHandler(expression, namedFunctions);\n if (directFunctionLike) {\n return { functionLike: directFunctionLike, namedExpressions };\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!functionResolution) return null;\n return resolveReturnedTrackedFunctionLike(\n functionResolution.functionLike,\n expression.arguments,\n sourceFile,\n functionResolution.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return null;\n\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = resolveTrackedOpenRedirectFunctionLike(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return null;\n\n const resolvedObjectLiteral = resolveObjectLiteralExpressionAtPropertyPath(\n propertyAlias.initializer,\n sourceFile,\n propertyAlias.propertyPath.slice(0, -1),\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n const functionLike = findFunctionLikeOnObjectLiteral(\n resolvedObjectLiteral.objectLiteral,\n propertyAlias.propertyName,\n namedFunctions,\n );\n return functionLike\n ? { functionLike, namedExpressions: resolvedObjectLiteral.namedExpressions }\n : null;\n }\n\n if (!isMemberAccessExpression(expression)) {\n return null;\n }\n\n const propertyName = getMemberAccessPropertyName(expression);\n if (!propertyName) return null;\n const resolvedObjectLiteral = resolveObjectLiteralExpression(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n const functionLike = findFunctionLikeOnObjectLiteral(\n resolvedObjectLiteral.objectLiteral,\n propertyName,\n namedFunctions,\n );\n return functionLike\n ? { functionLike, namedExpressions: resolvedObjectLiteral.namedExpressions }\n : null;\n}\n\nfunction functionLikeReferencesOrigin(node: ts.FunctionLikeDeclarationBase): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isPropertyAccessExpression(current) && isPropertyNamed(current.name, 'origin')) {\n found = true;\n return;\n }\n\n if (ts.isIdentifier(current) && current.text === 'origin') {\n found = true;\n return;\n }\n\n if (ts.isBindingElement(current)) {\n if (ts.isIdentifier(current.name) && current.name.text === 'origin') {\n found = true;\n return;\n }\n if (current.propertyName && isPropertyNamed(current.propertyName, 'origin')) {\n found = true;\n return;\n }\n }\n\n current.forEachChild(visit);\n };\n\n node.forEachChild(visit);\n return found;\n}\n\nfunction isAddEventListenerCall(node: CallLikeExpression): boolean {\n return (\n (ts.isIdentifier(node.expression) && node.expression.text === 'addEventListener') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'addEventListener'))\n );\n}\n\nfunction isCookieMutationSetCall(node: CallLikeExpression): boolean {\n if (\n !ts.isPropertyAccessExpression(node.expression) ||\n !isPropertyNamed(node.expression.name, 'set')\n ) {\n return false;\n }\n\n return (\n (ts.isIdentifier(node.expression.expression) &&\n ['Cookies', 'cookieStore', 'cookies'].includes(node.expression.expression.text)) ||\n (ts.isPropertyAccessExpression(node.expression.expression) &&\n isPropertyNamed(node.expression.expression.name, 'cookies', 'cookieStore'))\n );\n}\n\nfunction expressionLooksLikeAuthCookieName(\n node: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n): boolean {\n if (!node) return false;\n if (isAuthStorageKeyLiteral(node)) return true;\n return hasAuthCredentialText(node, sourceFile);\n}\n\nfunction objectLiteralLooksLikeAuthCookieConfig(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n): boolean {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return false;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !['name', 'key', 'cookie'].includes(propertyName)) continue;\n return expressionLooksLikeAuthCookieName(property.initializer, sourceFile);\n }\n return false;\n}\n\nfunction hasExplicitAuthCookieHardening(expression: ts.Expression | undefined): boolean {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return false;\n\n const httpOnly = getObjectLiteralBooleanPropertyValue(expression, 'httpOnly', 'http_only');\n const secure = getObjectLiteralBooleanPropertyValue(expression, 'secure');\n const sameSite = getObjectLiteralStringPropertyValue(expression, 'sameSite', 'same_site');\n\n return httpOnly === true && secure === true && Boolean(sameSite?.trim());\n}\n\nfunction isSetCookieHeaderName(node: ts.Expression | undefined): boolean {\n const literal = getExpressionLiteralValue(node)?.trim().toLowerCase();\n return literal === 'set-cookie';\n}\n\nfunction cookieHeaderStringLooksAuthLike(value: string): boolean {\n return /\\b(?:auth|session|token|jwt|refresh_token|access_token)[^=]*=/i.test(value);\n}\n\nfunction cookieHeaderStringHasHardening(value: string): boolean {\n return (\n /;\\s*httponly\\b/i.test(value) && /;\\s*secure\\b/i.test(value) && /;\\s*samesite=/i.test(value)\n );\n}\n\nfunction collectCookieHeaderStrings(expression: ts.Expression | undefined): string[] {\n if (!expression) return [];\n const literal = getExpressionLiteralValue(expression);\n if (literal !== null) return [literal];\n if (ts.isArrayLiteralExpression(expression)) {\n return expression.elements\n .map((element) => (ts.isExpression(element) ? getExpressionLiteralValue(element) : null))\n .filter((value): value is string => value !== null);\n }\n return [];\n}\n\nfunction isInsecureTransportUrl(value: string | null): boolean {\n return typeof value === 'string' && /^(?:http|ws):\\/\\//i.test(value.trim());\n}\n\nfunction isPropertyLikeAccessExpression(\n node: ts.Node | undefined,\n): node is ts.PropertyAccessExpression | ts.PropertyAccessChain {\n return Boolean(node && (ts.isPropertyAccessExpression(node) || ts.isPropertyAccessChain(node)));\n}\n\nfunction isElementLikeAccessExpression(\n node: ts.Node | undefined,\n): node is ts.ElementAccessExpression | ts.ElementAccessChain {\n return Boolean(node && (ts.isElementAccessExpression(node) || ts.isElementAccessChain(node)));\n}\n\ntype CallLikeExpression = ts.CallExpression | ts.CallChain;\n\nfunction isMemberAccessExpression(\n node: ts.Node | undefined,\n): node is\n | ts.PropertyAccessExpression\n | ts.PropertyAccessChain\n | ts.ElementAccessExpression\n | ts.ElementAccessChain {\n return isPropertyLikeAccessExpression(node) || isElementLikeAccessExpression(node);\n}\n\nfunction isCallLikeExpression(node: ts.Node | undefined): node is CallLikeExpression {\n return Boolean(node && (ts.isCallExpression(node) || ts.isCallChain(node)));\n}\n\nfunction isMemberAccessNamed(node: ts.Node | undefined, ...names: string[]): boolean {\n if (!node) return false;\n if (isPropertyLikeAccessExpression(node)) {\n return isPropertyNamed(node.name, ...names);\n }\n if (isElementLikeAccessExpression(node)) {\n return isPropertyNamed(node.argumentExpression, ...names);\n }\n return false;\n}\n\nfunction isLocationObjectExpression(expression: ts.Expression): boolean {\n return (\n (ts.isIdentifier(expression) && expression.text === 'location') ||\n ((ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) &&\n ts.isIdentifier(expression.expression) &&\n ['window', 'globalThis', 'document', 'self', 'parent', 'top'].includes(\n expression.expression.text,\n ) &&\n isMemberAccessNamed(expression, 'location'))\n );\n}\n\nfunction isLocationAssignmentTarget(expression: ts.Expression): boolean {\n return (\n isLocationObjectExpression(expression) ||\n ((ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) &&\n isLocationObjectExpression(expression.expression) &&\n isMemberAccessNamed(expression, 'href'))\n );\n}\n\nfunction isFetchLikeCall(node: CallLikeExpression): boolean {\n return (\n (ts.isIdentifier(node.expression) && node.expression.text === 'fetch') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'fetch'))\n );\n}\n\nfunction isAxiosLikeCall(node: CallLikeExpression): boolean {\n if (!ts.isPropertyAccessExpression(node.expression)) return false;\n return (\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'axios' &&\n isPropertyNamed(\n node.expression.name,\n 'get',\n 'post',\n 'put',\n 'patch',\n 'delete',\n 'head',\n 'options',\n 'request',\n )\n );\n}\n\nfunction isAxiosConfigCall(node: CallLikeExpression): boolean {\n return ts.isIdentifier(node.expression) && node.expression.text === 'axios';\n}\n\nfunction isRealtimeTransportConstructor(node: ts.NewExpression): boolean {\n return (\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'WebSocket' || node.expression.text === 'EventSource')\n );\n}\n\nfunction hasPlaceholderNavigationTarget(attributes: ts.JsxAttributes): boolean {\n const targetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!targetValue) return false;\n\n const normalized = targetValue.trim().toLowerCase();\n return (\n normalized === '#' ||\n normalized === '/#' ||\n normalized === 'javascript:' ||\n normalized === 'javascript:void(0)' ||\n normalized === 'javascript:void(0);'\n );\n}\n\nfunction isExternalUrl(value: string | null): boolean {\n return typeof value === 'string' && /^(?:https?:)?\\/\\//i.test(value.trim());\n}\n\nfunction parseExternalUrl(value: string | null): URL | null {\n if (!isExternalUrl(value)) return null;\n\n const normalized = value?.trim() ?? '';\n const input = normalized.startsWith('//') ? `https:${normalized}` : normalized;\n try {\n return new URL(input);\n } catch {\n return null;\n }\n}\n\nfunction isProviderAuthorizeUrl(url: URL): boolean {\n const hostAndPath = `${url.hostname}${url.pathname}`.toLowerCase();\n const hasAuthorizeLikePath = /(?:oauth|authorize|openid|sso|login\\/oauth)/i.test(hostAndPath);\n const hasProviderQuery = ['client_id', 'redirect_uri', 'response_type', 'scope'].some((param) =>\n url.searchParams.has(param),\n );\n return (\n (hasAuthorizeLikePath && hasProviderQuery) ||\n (url.searchParams.has('client_id') && url.searchParams.has('redirect_uri'))\n );\n}\n\nfunction isAuthProviderUrlMissingState(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n return !url.searchParams.has('state');\n}\n\nfunction isAuthProviderCodeFlowMissingPkce(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n\n const responseType = url.searchParams.get('response_type')?.toLowerCase() ?? '';\n if (!responseType.includes('code')) return false;\n return !url.searchParams.has('code_challenge');\n}\n\nfunction isAuthProviderIdTokenFlowMissingNonce(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n\n const responseType = url.searchParams.get('response_type')?.toLowerCase() ?? '';\n if (!responseType.includes('id_token')) return false;\n return !url.searchParams.has('nonce');\n}\n\nfunction hasMainLandmarkSignal(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'main') return true;\n\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'));\n return roleValue?.trim().toLowerCase() === 'main';\n}\n\nfunction getMainLandmarkId(attributes: ts.JsxAttributes, tagName: string | null): string | null {\n if (!hasMainLandmarkSignal(attributes, tagName)) return null;\n\n const idValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id'));\n return idValue?.trim() ? idValue.trim() : null;\n}\n\nfunction getSkipNavTargetId(attributes: ts.JsxAttributes, tagName: string | null): string | null {\n if (tagName !== 'a') return null;\n\n const hrefValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!hrefValue?.startsWith('#')) return null;\n\n const targetId = hrefValue.slice(1).trim();\n return targetId.length > 0 ? targetId : null;\n}\n\nfunction isAuthStorageKeyLiteral(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n if (node.text === 'decantr_authenticated') return false;\n return /(?:token|auth|jwt|session|access_token|refresh_token)/i.test(node.text);\n }\n return false;\n}\n\nfunction isBrowserStorageObject(node: ts.Expression): boolean {\n return ts.isIdentifier(node) && (node.text === 'localStorage' || node.text === 'sessionStorage');\n}\n\nfunction isDocumentObject(node: ts.Expression): boolean {\n return ts.isIdentifier(node) && node.text === 'document';\n}\n\nfunction isCookiePropertyAccess(node: ts.Expression): boolean {\n return (\n ts.isPropertyAccessExpression(node) &&\n isDocumentObject(node.expression) &&\n isPropertyNamed(node.name, 'cookie')\n );\n}\n\nfunction hasAuthCredentialText(node: ts.Node, sourceFile: ts.SourceFile): boolean {\n return /(?:token|auth|jwt|session|access_token|refresh_token)/i.test(node.getText(sourceFile));\n}\n\nfunction isAuthorizationHeaderName(node: ts.Node | undefined): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) {\n return /^authorization$/i.test(node.text);\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return /^authorization$/i.test(node.text);\n }\n if (ts.isComputedPropertyName(node)) {\n return isAuthorizationHeaderName(node.expression);\n }\n return false;\n}\n\nfunction isAuthorizationHeaderAccess(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n return (\n (ts.isPropertyAccessExpression(node) && isAuthorizationHeaderName(node.name)) ||\n (ts.isElementAccessExpression(node) && isAuthorizationHeaderName(node.argumentExpression))\n );\n}\n\nfunction isHeaderClearValue(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n const literal = getExpressionLiteralValue(node);\n if (literal !== null) {\n return literal.trim().length === 0;\n }\n return (\n node.kind === ts.SyntaxKind.NullKeyword ||\n node.kind === ts.SyntaxKind.UndefinedKeyword ||\n (ts.isIdentifier(node) && node.text === 'undefined')\n );\n}\n\nfunction countAuthGuardSignals(code: string): number {\n const patterns = [\n /\\b(?:ProtectedRoute|AuthGuard|RequireAuth|withAuth|requireAuth|requireAdmin|ensureAuth|ensureAdmin|useRequireAuth)\\b/,\n /\\b(?:useAuth|useSession|getServerSession|authGuard|isAuthenticated|isSignedIn)\\b/,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)[^'\"`]*['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(/,\n /\\bbeforeEnter\\b/,\n /\\bmiddleware\\b/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countSkipNavSignals(code: string): number {\n const patterns = [\n /\\bskip(?:-| )?nav(?:igation)?\\b/i,\n /\\bskip to (?:content|main|navigation)\\b/i,\n /href\\s*=\\s*[\"']#(?:main|content|main-content|app-main)[\"']/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSessionSignals(code: string): number {\n const patterns = [\n /\\b(?:useAuth|useSession|getSession|getServerSession|sessionState|authState)\\b/,\n /\\b(?:supabase\\.auth\\.getSession|auth\\.getSession|session\\.(?:user|token|status)|auth\\.(?:user|session|status))\\b/,\n /\\bstatus\\s*===?\\s*['\"`](?:authenticated|unauthenticated|loading)['\"`]/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthUnauthenticatedBranchSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*!\\s*(?:session|user|currentUser|currentSession|authUser)\\b/i,\n /\\bif\\s*\\(\\s*(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)\\s*\\)/i,\n /\\bstatus\\s*===?\\s*['\"`]unauthenticated['\"`]/i,\n /\\bstatus\\s*!==?\\s*['\"`]authenticated['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthLoadingSignals(code: string): number {\n const patterns = [\n /\\b(?:isLoading|loading|isPending|pending|authLoading|sessionLoading)\\b/,\n /\\bstatus\\s*===?\\s*['\"`]loading['\"`]/,\n /\\b(?:Suspense|fallback|Skeleton|Spinner)\\b/,\n />\\s*(?:signing you in|redirecting|authenticating|verifying your session|checking your session|loading your workspace|finishing sign in)(?:[.!…]+)?\\s*</i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthProtectedLoadingRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthBlankLoadingRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:null|<>\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*(?:null|<>\\s*<\\/>)\\s*;?/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthAnonymousLoadingRedirectSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,260}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthProtectedUnauthenticatedRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthErrorSignals(code: string): number {\n const patterns = [\n /\\bstatus\\s*===?\\s*['\"`]error['\"`]/,\n /\\b(?:authError|sessionError|loginError|signInError|signUpError|formError|errorMessage|setError)\\b/,\n /\\bcatch\\s*\\(/,\n /\\b(?:toast|notify|notification|Alert|alert|ErrorBoundary)\\b/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSuccessSignals(code: string): number {\n const patterns = [\n /\\bstatus\\s*===?\\s*['\"`]success['\"`]/,\n /\\b(?:authSuccess|recoverySuccess|resetSuccess|passwordResetSent|resetEmailSent|verificationSent|emailSent|successMessage|setSuccess)\\b/i,\n /\\b(?:toast|notify|notification)\\.success\\b/i,\n />\\s*(?:check your email|email sent|reset link sent|password reset email sent|verification email sent|password updated|account created)\\s*</i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCallbackTokenSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`](?:code|access_token|id_token|refresh_token)['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.(?:code|access_token|id_token|refresh_token)\\b/gi,\n /\\bnew URLSearchParams\\s*\\(\\s*(?:window\\.)?location\\.hash(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)/gi,\n /\\b(?:window\\.)?location\\.hash\\b/gi,\n /\\b(?:exchangeCodeForSession|handleAuthCallback|authCallback|oauthCallback)\\b/gi,\n ];\n\n const count = patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n return count + (/callback/i.test(filePath) ? 1 : 0);\n}\n\nfunction countAuthCallbackExchangeSignals(code: string): number {\n const patterns = [\n /\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b/gi,\n /\\b(?:auth|supabase\\.auth)\\.[A-Za-z0-9_]*exchange[A-Za-z0-9_]*\\s*\\(/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackExchangeErrorSignals(code: string): number {\n const patterns = [\n /\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b[\\s\\S]{0,240}\\.catch\\s*\\(/gi,\n /try\\s*{[\\s\\S]{0,240}\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b[\\s\\S]{0,240}catch\\s*\\(/gi,\n /\\b(?:exchangeError|callbackExchangeError|tokenExchangeError|sessionExchangeError)\\b/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackErrorSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`](?:error|error_description|error_code|error_uri)['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.(?:error|error_description|error_code|error_uri)\\b/gi,\n /\\b(?:callbackError|oauthError|providerError|authCallbackError)\\b/gi,\n /\\b(?:toast|notify|notification)\\.error\\b/gi,\n />\\s*(?:authentication failed|sign in failed|login failed|oauth error|provider error|unable to sign you in)\\s*</gi,\n ];\n\n const count = patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n return count + (/callback/i.test(filePath) && /\\b(?:error|failed|failure)\\b/i.test(code) ? 1 : 0);\n}\n\nfunction countAuthCallbackStateSignals(code: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`]state['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.state\\b/gi,\n /\\bnew URLSearchParams\\s*\\(\\s*(?:window\\.)?location\\.hash(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)\\.get\\s*\\(\\s*['\"`]state['\"`]\\s*\\)/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackStateValidationSignals(code: string): number {\n let count = 0;\n\n if (/\\b(?:validateState|verifyState|assertState|compareState|checkState)\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n if (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['getItem']) > 0 &&\n hasStateComparison(code)\n ) {\n count += 1;\n }\n\n if (\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['get', 'getAll']) > 0 &&\n hasStateComparison(code)\n ) {\n count += 1;\n }\n\n if (\n /\\b(?:state|providerState|callbackState|returnedState)\\b\\s*(?:===|==|!==|!=)\\s*\\b(?:expectedState|storedState|sessionState|oauthState|csrfState)\\b/i.test(\n code,\n ) ||\n /\\b(?:expectedState|storedState|sessionState|oauthState|csrfState)\\b\\s*(?:===|==|!==|!=)\\s*\\b(?:state|providerState|callbackState|returnedState)\\b/i.test(\n code,\n )\n ) {\n count += 1;\n }\n\n return count;\n}\n\nfunction hasStateComparison(code: string): boolean {\n return /(?:state|providerState|callbackState|returnedState|expectedState|storedState|sessionState|oauthState|csrfState)\\s*(?:===|==|!==|!=)/i.test(\n code,\n );\n}\n\nfunction countStateLikeMemberCalls(code: string, receivers: string[], methods: string[]): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (const receiver of receivers) {\n const receiverLower = receiver.toLowerCase();\n for (\n let index = lowerCode.indexOf(receiverLower);\n index !== -1;\n index = lowerCode.indexOf(receiverLower, index + receiverLower.length)\n ) {\n let cursor = index + receiverLower.length;\n cursor = skipInlineWhitespace(lowerCode, cursor);\n if (lowerCode[cursor] !== '.') continue;\n cursor = skipInlineWhitespace(lowerCode, cursor + 1);\n\n for (const method of methods) {\n const methodLower = method.toLowerCase();\n if (!lowerCode.startsWith(methodLower, cursor)) continue;\n const afterMethod = skipInlineWhitespace(lowerCode, cursor + methodLower.length);\n if (lowerCode[afterMethod] !== '(') continue;\n if (callHasStateLikeStringArgument(code, afterMethod)) {\n count += 1;\n }\n }\n }\n }\n\n return count;\n}\n\nfunction countStateLikeFunctionCalls(code: string, names: string[]): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (const name of names) {\n const nameLower = name.toLowerCase();\n for (\n let index = lowerCode.indexOf(nameLower);\n index !== -1;\n index = lowerCode.indexOf(nameLower, index + nameLower.length)\n ) {\n const afterName = skipInlineWhitespace(lowerCode, index + nameLower.length);\n if (lowerCode[afterName] === '(' && callHasStateLikeStringArgument(code, afterName)) {\n count += 1;\n }\n }\n }\n\n return count;\n}\n\nfunction skipInlineWhitespace(value: string, index: number): number {\n let cursor = index;\n while (cursor < value.length) {\n const char = value[cursor];\n if (char !== ' ' && char !== '\\t' && char !== '\\n' && char !== '\\r') break;\n cursor += 1;\n }\n return cursor;\n}\n\nfunction callHasStateLikeStringArgument(code: string, openParenIndex: number): boolean {\n const closeParenIndex = findCallCloseParen(code, openParenIndex, 240);\n if (closeParenIndex === -1) return false;\n return containsStateLikeStringLiteral(code.slice(openParenIndex + 1, closeParenIndex));\n}\n\nfunction findCallCloseParen(code: string, openParenIndex: number, maxLength: number): number {\n const maxIndex = Math.min(code.length, openParenIndex + maxLength);\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = openParenIndex + 1; index < maxIndex; index += 1) {\n const char = code[index]!;\n if (quote) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === '`') {\n quote = char;\n } else if (char === ')') {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction containsStateLikeStringLiteral(value: string): boolean {\n let quote: string | null = null;\n let literal = '';\n let escaped = false;\n\n for (const char of value) {\n if (!quote) {\n if (char === \"'\" || char === '\"' || char === '`') {\n quote = char;\n literal = '';\n }\n continue;\n }\n\n if (escaped) {\n literal += char;\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n const lowerLiteral = literal.toLowerCase();\n if (lowerLiteral.includes('state') || lowerLiteral.includes('csrf')) return true;\n quote = null;\n } else {\n literal += char;\n }\n }\n\n return false;\n}\n\nfunction countAuthCallbackStateStorageSignals(code: string): number {\n return (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['getItem']) +\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['get', 'getAll'])\n );\n}\n\nfunction countAuthCallbackStateStorageClearSignals(code: string): number {\n return (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['removeItem']) +\n countStateLikeFunctionCalls(code, ['deleteCookie', 'clearCookie', 'removeCookie']) +\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['delete', 'remove']) +\n countDocumentCookieStateClears(code)\n );\n}\n\nfunction countDocumentCookieStateClears(code: string): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (\n let index = lowerCode.indexOf('document.cookie');\n index !== -1;\n index = lowerCode.indexOf('document.cookie', index + 'document.cookie'.length)\n ) {\n const assignmentIndex = lowerCode.indexOf('=', index + 'document.cookie'.length);\n if (assignmentIndex === -1 || assignmentIndex - index > 48) continue;\n\n const endIndex = findCookieAssignmentEnd(lowerCode, assignmentIndex + 1);\n const assignment = lowerCode.slice(assignmentIndex + 1, endIndex);\n const mentionsStateToken = assignment.includes('state') || assignment.includes('csrf');\n const expiresImmediately =\n assignment.includes('max-age=0') ||\n assignment.includes('max-age = 0') ||\n assignment.includes('thu, 01 jan 1970');\n\n if (mentionsStateToken && expiresImmediately) {\n count += 1;\n }\n }\n\n return count;\n}\n\nfunction findCookieAssignmentEnd(code: string, startIndex: number): number {\n const maxIndex = Math.min(code.length, startIndex + 320);\n for (let index = startIndex; index < maxIndex; index += 1) {\n const char = code[index];\n if (char === '\\n' || char === '\\r') return index;\n }\n return maxIndex;\n}\n\nfunction countAuthCallbackUrlScrubSignals(code: string): number {\n const patterns = [\n /\\bhistory\\.replaceState\\s*\\(/gi,\n /\\brouter\\.replace\\s*\\(/gi,\n /\\bwindow\\.history\\.replaceState\\s*\\(/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?!\\/)[^'\"`]*['\"`]/gi,\n /\\bwindow\\.location\\.replace\\s*\\(\\s*['\"`]\\/(?!\\/)[^'\"`]*['\"`]/gi,\n /\\b(?:window\\.)?location\\.hash\\s*=\\s*['\"`]\\s*['\"`]/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthExitSignals(code: string): number {\n const patterns = [\n /\\b(?:log\\s*out|logout|sign\\s*out|signout|sign-out)\\b/i,\n /\\b(?:supabase\\.auth\\.signOut|auth\\.signOut|session\\.signOut)\\s*\\(/,\n /\\/(?:logout|signout|sign-out)\\b/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSessionTeardownSignals(code: string): number {\n const patterns = [\n /\\b(?:supabase\\.auth\\.signOut|auth\\.signOut|session\\.signOut)\\s*\\(/,\n /\\b(?:clearSession|resetSession|destroySession|invalidateSession|revokeSession|endSession|terminateSession|removeSession)\\s*\\(/,\n /\\b(?:deleteCookie|clearCookie|removeCookie)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:cookies?|cookieStore)\\.(?:delete|remove)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:localStorage|sessionStorage)\\.removeItem\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthStorageClearSignals(code: string): number {\n const patterns = [\n /\\b(?:localStorage|sessionStorage)\\.removeItem\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:localStorage|sessionStorage)\\.clear\\s*\\(/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCookieClearSignals(code: string): number {\n const patterns = [\n /\\b(?:deleteCookie|clearCookie|removeCookie)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:cookies?|cookieStore)\\.(?:delete|remove)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\bdocument\\.cookie\\s*=\\s*[^;\\n]*(?:auth|session|token|accessToken|refreshToken|user)[^;\\n]*(?:expires\\s*=\\s*Thu,\\s*01 Jan 1970|max-age\\s*=\\s*0)/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCacheClientSignals(code: string): number {\n const patterns = [\n /from\\s+['\"`](?:@tanstack\\/react-query|react-query)['\"`]/gi,\n /\\b(?:useQueryClient|queryClient|QueryClient)\\b/g,\n /from\\s+['\"`]@apollo\\/client['\"`]/gi,\n /\\b(?:useApolloClient|apolloClient|ApolloClient|InMemoryCache)\\b/g,\n /from\\s+['\"`](?:urql|@urql\\/core)['\"`]/gi,\n /\\b(?:urqlClient|cacheExchange)\\b/g,\n /from\\s+['\"`]swr['\"`]/gi,\n /\\buseSWRConfig\\b/g,\n /\\bapi\\.util\\.resetApiState\\b/g,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCacheClearSignals(code: string): number {\n const patterns = [\n /\\b(?:queryClient|useQueryClient\\s*\\(\\s*\\))\\.(?:clear|removeQueries|resetQueries|invalidateQueries|cancelQueries)\\s*\\(/gi,\n /\\b(?:apolloClient|client)\\.(?:resetStore|clearStore|stop)\\s*\\(/gi,\n /\\b(?:cache|apolloClient\\.cache)\\.(?:evict|gc|modify)\\s*\\(/gi,\n /\\b(?:mutate|useSWRConfig\\s*\\(\\s*\\)\\.mutate)\\s*\\([^,\\n]+,\\s*(?:undefined|null|false)\\b/gi,\n /\\b(?:dispatch|store\\.dispatch)\\s*\\(\\s*api\\.util\\.resetApiState\\s*\\(\\s*\\)\\s*\\)/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRefreshSignals(code: string): number {\n let count = 0;\n\n if (\n /\\b(?:setInterval|setTimeout)\\s*\\(/i.test(code) &&\n /\\b(?:refreshSession|refreshToken|renewSession|getSession|startAutoRefresh)\\b/i.test(code)\n ) {\n count += 1;\n }\n\n if (/\\b(?:supabase\\.auth|auth)\\.onAuthStateChange\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n if (/\\bstartAutoRefresh\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n return count;\n}\n\nfunction countAuthRefreshClearSignals(code: string): number {\n const patterns = [\n /\\bclearInterval\\s*\\(/gi,\n /\\bclearTimeout\\s*\\(/gi,\n /\\b(?:subscription|authSubscription|authListener)\\.unsubscribe\\s*\\(/gi,\n /\\bstopAutoRefresh\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRealtimeSignals(code: string): number {\n const patterns = [\n /\\bnew\\s+WebSocket\\s*\\(/gi,\n /\\bnew\\s+EventSource\\s*\\(/gi,\n /\\bsupabase\\.channel\\s*\\(/gi,\n /\\bpusher\\.subscribe\\s*\\(/gi,\n /\\becho\\.(?:private|channel|join)\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRealtimeClearSignals(code: string): number {\n const patterns = [\n /\\b(?:socket|ws|channel|subscription|realtime|eventSource)\\.(?:close|disconnect|unsubscribe|remove|stop)\\s*\\(/gi,\n /\\bsupabase\\.removeChannel\\s*\\(/gi,\n /\\bpusher\\.unsubscribe\\s*\\(/gi,\n /\\becho\\.(?:leave|leaveChannel|disconnect)\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCoordinationSignals(code: string): number {\n const patterns = [\n /\\bnew\\s+BroadcastChannel\\s*\\(/gi,\n /\\b(?:window\\.)?addEventListener\\s*\\(\\s*['\"`]storage['\"`]/gi,\n /\\b(?:window\\.)?onstorage\\s*=/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCoordinationClearSignals(code: string): number {\n const patterns = [\n /\\b(?:auth|session|sync|broadcast)[A-Za-z0-9_$]*\\.close\\s*\\(/gi,\n /\\b(?:window\\.)?removeEventListener\\s*\\(\\s*['\"`]storage['\"`]/gi,\n /\\b(?:window\\.)?onstorage\\s*=\\s*null\\b/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthEntrySignals(code: string): number {\n const patterns = [\n /\\b(?:signIn|signin|logIn|login|register|signUp|signup|createAccount|forgotPassword|resetPassword)\\s*\\(/i,\n />\\s*(?:sign in|log in|register|sign up|create account|forgot password|reset password)\\s*</i,\n /\\b(?:type|autoComplete|autocomplete)\\s*=\\s*[\"'{](?:email|username|current-password|new-password|password)/i,\n /<form\\b/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countSignInFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:signIn|signin|logIn|login)\\s*\\(/i,\n />\\s*(?:sign in|log in)\\s*</i,\n /\\bcurrent-password\\b/i,\n /(?:^|\\/)(?:login|log-?in|sign-?in)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countRecoveryFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:forgotPassword|resetPassword|sendPasswordReset|requestPasswordReset|recoverAccount|recoverPassword)\\s*\\(/i,\n />\\s*(?:forgot password|reset password|recover account)\\s*</i,\n /\\bnew-password\\b/i,\n /(?:^|\\/)(?:forgot-password|reset-password|password-reset|recover|recovery)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countSignUpFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:signUp|signup|register|createAccount)\\s*\\(/i,\n />\\s*(?:sign up|register|create account)\\s*</i,\n /(?:^|\\/)(?:signup|sign-up|register)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countProtectedSurfaceSignals(code: string): number {\n const patterns = [\n /['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\b(?:navigate|redirect|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthProtectedRedirectSignals(code: string): number {\n const patterns = [\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthAnonymousRedirectSignals(code: string): number {\n const patterns = [\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nconst OPEN_REDIRECT_QUERY_KEY_PATTERN = String.raw`next|redirect(?:To|[_-]to)?|return(?:To|[_-]to)?|callback(?:Url|[_-]url)?|continue(?:Url|[_-]url)?|from`;\nconst OPEN_REDIRECT_SOURCE_PATTERN = String.raw`\\b(?:searchParams|(?:request|req)\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)|\\b(?:router\\.query|route\\.query|query)\\.(?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})\\b|\\b(?:new\\s+)?URLSearchParams\\s*\\(\\s*(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:search|hash)(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)|\\bnew\\s+URL\\(\\s*(?:request|req)\\.url\\s*\\)\\.searchParams\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)`;\nconst OPEN_REDIRECT_SOURCE_REGEX = new RegExp(OPEN_REDIRECT_SOURCE_PATTERN, 'i');\nconst OPEN_REDIRECT_QUERY_KEY_REGEX = new RegExp(`^(?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})$`, 'i');\nconst OPEN_REDIRECT_QUERY_CARRIER_REGEX = /\\b(?:searchParams|router\\.query|route\\.query|query)\\b/i;\nconst OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX = /\\b(?:router|route)\\b/i;\nconst LOCATION_QUERY_SOURCE_REGEX =\n /\\b(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:search|hash)(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\b/i;\nconst LOCATION_URL_INPUT_REGEX =\n /\\b(?:(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:href|search|hash)|(?:request|req)\\.url)\\b/i;\nconst LOCATION_URL_SOURCE_REGEX =\n /\\bnew\\s+URL\\(\\s*(?:(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:href|search|hash)|(?:request|req)\\.url)\\s*\\)/i;\nconst NEXT_URL_SOURCE_REGEX = /\\b(?:request|req)\\.nextUrl\\b/i;\nconst REQUEST_OBJECT_SOURCE_REGEX = /\\b(?:request|req)\\b/i;\n\nfunction countAuthOpenRedirectSignals(code: string): number {\n const patterns = [\n new RegExp(\n String.raw`\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*[^)]*(?:${OPEN_REDIRECT_SOURCE_PATTERN})[^)]*\\)`,\n 'gi',\n ),\n new RegExp(\n String.raw`\\b(?:window|globalThis|document|self|parent|top)\\.location(?:\\.href)?\\s*=\\s*[^;\\n]*(?:${OPEN_REDIRECT_SOURCE_PATTERN})`,\n 'gi',\n ),\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction propertyPathLooksLikeOpenRedirectQueryCarrier(propertyPath: string[]): boolean {\n return propertyPath.length > 0 && OPEN_REDIRECT_QUERY_CARRIER_REGEX.test(propertyPath.join('.'));\n}\n\nfunction propertyPathLooksLikeOpenRedirectSearchParamsCarrier(propertyPath: string[]): boolean {\n return propertyPath.length > 0 && propertyPath[propertyPath.length - 1] === 'searchParams';\n}\n\nfunction propertyPathLooksLikeOpenRedirectQueryContainerBase(propertyPath: string[]): boolean {\n return (\n propertyPath.length > 0 && OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX.test(propertyPath.join('.'))\n );\n}\n\nfunction expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n namedPropertyAliases: Map<string, NamedPropertyAlias> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n seenFunctions: Set<string> = new Set(),\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n const namedFunctions = getCachedNamedFunctionLikeDeclarations(sourceFile);\n const directFunctionLike = resolveFunctionLikeHandler(expression, namedFunctions);\n const directFunctionKey = directFunctionLike ? getFunctionLikeCacheKey(directFunctionLike) : null;\n if (directFunctionLike && directFunctionKey && !seenFunctions.has(directFunctionKey)) {\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(directFunctionKey);\n return getFunctionLikeReturnExpressions(directFunctionLike).some((returnedExpression) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n returnedExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n );\n }\n\n if (\n ts.isBinaryExpression(expression) &&\n (expression.operatorToken.kind === ts.SyntaxKind.QuestionQuestionToken ||\n expression.operatorToken.kind === ts.SyntaxKind.BarBarToken)\n ) {\n return (\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.left,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.right,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isConditionalExpression(expression)) {\n return (\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.whenTrue,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.whenFalse,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isTemplateExpression(expression)) {\n return expression.templateSpans.some((span) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n span.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isTaggedTemplateExpression(expression)) {\n return expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.template,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n [\n 'String',\n 'atob',\n 'btoa',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(expression.expression.text) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeJsonParseHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeJsonParseHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n (ts.isIdentifier(expression.expression) || isMemberAccessExpression(expression.expression)) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBufferFromHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'String',\n 'atob',\n 'btoa',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeWindowObjectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'exec') &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBufferFromHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'from') &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Buffer' &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'at') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'shift') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'pop') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'find', 'findLast') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'filter') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'slice') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'reverse',\n 'toReversed',\n 'sort',\n 'toSorted',\n 'concat',\n 'flat',\n 'join',\n 'map',\n 'flatMap',\n 'splice',\n 'toSpliced',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'reduce', 'reduceRight') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'trim') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'trim',\n 'trimStart',\n 'trimLeft',\n 'trimEnd',\n 'trimRight',\n 'padStart',\n 'padEnd',\n 'repeat',\n 'replace',\n 'replaceAll',\n 'slice',\n 'split',\n 'substr',\n 'substring',\n 'toLowerCase',\n 'toUpperCase',\n 'toLocaleLowerCase',\n 'toLocaleUpperCase',\n 'toLocaleString',\n 'toString',\n 'toWellFormed',\n 'valueOf',\n 'normalize',\n 'match',\n 'matchAll',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'values', 'next') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'get', 'getAll') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n ts.isNumericLiteral(expression.argumentExpression) &&\n expression.argumentExpression.text === '1' &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'value') &&\n isCallLikeExpression(expression.expression.expression) &&\n isMemberAccessExpression(expression.expression.expression.expression) &&\n isMemberAccessNamed(expression.expression.expression.expression, 'next') &&\n isCallLikeExpression(expression.expression.expression.expression.expression) &&\n isMemberAccessExpression(expression.expression.expression.expression.expression.expression) &&\n isMemberAccessNamed(\n expression.expression.expression.expression.expression.expression,\n 'entries',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression.expression.expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'value') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Array' &&\n isPropertyNamed(expression.expression.name, 'from') &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.some(\n (element) =>\n ts.isSpreadElement(element) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n seenFunctions,\n );\n const functionLike = functionResolution?.functionLike ?? null;\n const functionKey = functionLike ? getFunctionLikeCacheKey(functionLike) : null;\n if (functionLike && functionKey && functionResolution && !seenFunctions.has(functionKey)) {\n const boundExpressions = bindFunctionLikeArguments(\n functionLike,\n expression.arguments,\n functionResolution.namedExpressions,\n );\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n return getFunctionLikeReturnExpressions(functionLike).some((returnedExpression) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n returnedExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n );\n }\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'get', 'getAll') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryGetterFunction(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['get', 'getAll'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionContainsOpenRedirectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n namedPropertyAliases: Map<string, NamedPropertyAlias> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n seenFunctions: Set<string> = new Set(),\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (ts.isBinaryExpression(expression)) {\n return (\n expressionContainsOpenRedirectSource(\n expression.left,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.right,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isConditionalExpression(expression)) {\n return (\n expressionContainsOpenRedirectSource(\n expression.condition,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.whenTrue,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.whenFalse,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isTemplateExpression(expression)) {\n return expression.templateSpans.some((span) =>\n expressionContainsOpenRedirectSource(\n span.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isTaggedTemplateExpression(expression)) {\n return expressionContainsOpenRedirectSource(\n expression.template,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (ts.isNewExpression(expression)) {\n return (expression.arguments ?? []).some((argument) =>\n expressionContainsOpenRedirectSource(\n argument,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isArrayLiteralExpression(expression)) {\n return expression.elements.some((element) => {\n if (ts.isSpreadElement(element)) {\n return expressionContainsOpenRedirectSource(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n return (\n ts.isExpression(element) &&\n expressionContainsOpenRedirectSource(\n element,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n });\n }\n\n if (ts.isObjectLiteralExpression(expression)) {\n return expression.properties.some((property) => {\n if (ts.isPropertyAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n if (ts.isShorthandPropertyAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.name,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n if (ts.isSpreadAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n return false;\n });\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n );\n const functionLike = functionResolution?.functionLike ?? null;\n const functionKey = functionLike ? getFunctionLikeCacheKey(functionLike) : null;\n if (functionLike && functionKey && functionResolution && !seenFunctions.has(functionKey)) {\n const boundExpressions = bindFunctionLikeArguments(\n functionLike,\n expression.arguments,\n functionResolution.namedExpressions,\n );\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n if (\n getFunctionLikeReturnExpressions(functionLike).some((returnedExpression) =>\n expressionContainsOpenRedirectSource(\n returnedExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n )\n ) {\n return true;\n }\n }\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n isOpenRedirectQueryKeyExpression(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[1], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n isOpenRedirectQueryKeyExpression(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'get') &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'getAll') &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n return expression.arguments.some((argument) =>\n expressionContainsOpenRedirectSource(\n argument,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n OPEN_REDIRECT_QUERY_KEY_REGEX.test(expression.name.text) &&\n expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n isOpenRedirectQueryKeyExpression(\n expression.argumentExpression,\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) {\n return false;\n }\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionContainsOpenRedirectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n OPEN_REDIRECT_QUERY_KEY_REGEX.test(propertyAlias.propertyName) &&\n (expressionLooksLikeOpenRedirectQueryCarrier(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectQueryCarrier(propertyAlias.propertyPath.slice(0, -1)))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction isOpenRedirectQueryKeyExpression(\n expression: ts.Expression | undefined,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n): boolean {\n const value = getExpressionLiteralValue(expression);\n if (typeof value === 'string' && OPEN_REDIRECT_QUERY_KEY_REGEX.test(value)) {\n return true;\n }\n\n if (!expression) return false;\n if (\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression) ||\n ts.isParenthesizedExpression(expression)\n ) {\n return isOpenRedirectQueryKeyExpression(\n expression.expression,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = isOpenRedirectQueryKeyExpression(initializer, namedExpressions, seenIdentifiers);\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectQueryCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_QUERY_CARRIER_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Object' &&\n isPropertyNamed(expression.expression.name, 'fromEntries') &&\n expression.arguments.length > 0\n ) {\n const entriesExpression = expression.arguments[0];\n if (\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n entriesExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n if (\n expressionLooksLikeOpenRedirectEntriesCarrier(\n entriesExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n if (isPropertyLikeAccessExpression(expression) && isPropertyNamed(expression.name, 'query')) {\n return expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n (propertyPathLooksLikeOpenRedirectQueryCarrier(propertyAlias.propertyPath) ||\n (propertyAlias.propertyName === 'query' &&\n (expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.propertyPath.slice(0, -1),\n ))))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectEntriesCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectEntriesCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Array' &&\n isPropertyNamed(expression.expression.name, 'from') &&\n expression.arguments.length > 0 &&\n (expressionLooksLikeOpenRedirectEntriesCarrier(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.some(\n (element) =>\n ts.isSpreadElement(element) &&\n (expressionLooksLikeOpenRedirectEntriesCarrier(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )),\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'entries') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectEntriesCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectQueryContainerBase(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useRouter') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useRouter')))\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryContainerBase(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return false;\n if (propertyPathLooksLikeOpenRedirectQueryContainerBase(propertyAlias.propertyPath)) {\n return true;\n }\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationQuerySource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_QUERY_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationQuerySource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'slice', 'substring', 'replace', 'trim') &&\n expressionLooksLikeLocationQuerySource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'search', 'hash') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationQuerySource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['search', 'hash'].includes(propertyAlias.propertyName) &&\n (expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeWindowObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isIdentifier(expression) &&\n ['window', 'globalThis', 'document', 'self', 'parent', 'top'].includes(expression.text)\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeWindowObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (isLocationObjectExpression(expression)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useLocation') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useLocation')))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'location') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'location' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeHistoryObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'history') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeHistoryObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'history') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeHistoryObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'history' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBufferObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Buffer') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBufferObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Buffer') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBufferObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Buffer' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBufferFromHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'from') &&\n expressionLooksLikeBufferObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBufferFromHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBufferFromHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'from' &&\n expressionLooksLikeBufferObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'JSON') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'JSON') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'JSON' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonStringifyHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'stringify') &&\n expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonStringifyHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonStringifyHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'stringify' &&\n expressionLooksLikeJsonObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonParseHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'parse') &&\n expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonParseHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonParseHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'parse' &&\n expressionLooksLikeJsonObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeStructuredCloneHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'structuredClone') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'structuredClone') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeStructuredCloneHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeStructuredCloneHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'structuredClone' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalSymbolHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Symbol') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Symbol') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalSymbolHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Symbol' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBigIntHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'BigInt') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'BigInt') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBigIntHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'BigInt' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBooleanHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Boolean') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Boolean') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBooleanHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Boolean' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalNumberHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Number') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Number') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalNumberHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Number' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalObjectHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Object') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Object') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalObjectHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Object' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalStringHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'String') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'String') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalStringHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'String' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBase64Helper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && ['atob', 'btoa'].includes(expression.text)) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'atob', 'btoa') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBase64Helper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['atob', 'btoa'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isIdentifier(expression) &&\n [\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(expression.text)\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(\n expression,\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ) &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalUriCodecHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n [\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(propertyAlias.propertyName) &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationUrlSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_URL_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'URL'\n ) {\n return expressionLooksLikeLocationUrlInput(\n expression.arguments?.[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationUrlSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationUrlInput(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_URL_INPUT_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationUrlInput(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n expressionLooksLikeNextUrlSource(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'String' &&\n expression.arguments.length > 0 &&\n (expressionLooksLikeLocationObjectSource(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'toString', 'toJSON') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'href', 'search', 'hash') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'url') &&\n expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationUrlInput(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['href', 'search', 'hash'].includes(propertyAlias.propertyName) &&\n (expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'url' &&\n expressionLooksLikeRequestObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeRequestObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (REQUEST_OBJECT_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeRequestObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeNextUrlSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (NEXT_URL_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'clone') &&\n expressionLooksLikeNextUrlSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (isPropertyLikeAccessExpression(expression) && isPropertyNamed(expression.name, 'nextUrl')) {\n return expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeNextUrlSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'nextUrl' &&\n expressionLooksLikeRequestObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n const text = expression.getText(sourceFile);\n if (/\\b(?:searchParams|(?:request|req)\\.nextUrl\\.searchParams|url\\.searchParams)\\b/i.test(text)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'URLSearchParams'\n ) {\n return expressionLooksLikeLocationQuerySource(\n expression.arguments?.[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useSearchParams') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useSearchParams')))\n ) {\n return true;\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n isPropertyNamed(expression.name, 'searchParams')\n ) {\n return (\n expressionLooksLikeLocationUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectSearchParamsCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'searchParams' &&\n (expressionLooksLikeLocationUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectSearchParamsCarrier(propertyAlias.propertyPath))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationAssignmentTarget(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (isLocationAssignmentTarget(expression)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationAssignmentTarget(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'href') &&\n expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationMutationCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationMutationCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['assign', 'replace'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n expression &&\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'assign', 'replace') &&\n expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeWindowOpenCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeWindowOpenCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeWindowOpenCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression) && expression.text === 'open') {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeWindowOpenCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'open' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n new Set(),\n )\n ) {\n return true;\n }\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'open') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeHistoryMutationCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeHistoryMutationCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['pushState', 'replaceState'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeHistoryObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'pushState', 'replaceState') &&\n expressionLooksLikeHistoryObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeRouteTransitionCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (['redirect', 'navigate'].includes(expression.text)) {\n return true;\n }\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeRouteTransitionCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (propertyAlias && ['redirect', 'navigate'].includes(propertyAlias.propertyName)) {\n return true;\n }\n if (\n propertyAlias &&\n ['push', 'replace'].includes(propertyAlias.propertyName) &&\n (propertyPathLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.propertyPath.slice(0, -1),\n ) ||\n expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ))\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n (isMemberAccessNamed(expression, 'redirect', 'navigate') ||\n (isMemberAccessNamed(expression, 'push', 'replace') &&\n expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ))),\n );\n}\n\nfunction getRouteTransitionTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeRouteTransitionCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeRouteTransitionCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeRouteTransitionCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeHistoryMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[3];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeHistoryMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 2, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeHistoryMutationCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 2, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeRouteTransitionCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n if (\n expressionLooksLikeHistoryMutationCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[2];\n }\n\n return undefined;\n}\n\nfunction getAliasedApplyArgumentExpression(\n expression: ts.Expression | undefined,\n index: number,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): ts.Expression | undefined {\n if (!expression) return undefined;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return getAliasedApplyArgumentExpression(\n expression.expression,\n index,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return undefined;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return undefined;\n seenIdentifiers.add(expression.text);\n const result = getAliasedApplyArgumentExpression(\n initializer,\n index,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n if (!ts.isArrayLiteralExpression(expression)) return undefined;\n const argument = expression.elements[index];\n return ts.isExpression(argument) ? argument : undefined;\n}\n\nfunction getLocationMutationTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeLocationMutationCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeLocationMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeLocationMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeLocationMutationCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n return undefined;\n}\n\nfunction getWindowOpenTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeWindowOpenCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeWindowOpenCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeWindowOpenCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeWindowOpenCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n return undefined;\n}\n\nfunction countAuthRecoveryRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:forgot password|reset password|recover account)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countRegistrationRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:sign up|register|create account)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAnonymousEntryRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:back to sign in|back to login|return to sign in|return to login|sign in|log in)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countSignInRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:back to sign in|back to login|return to sign in|return to login|sign in|log in)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countHardcodedSecretSignals(code: string): number {\n const patterns = [/\\bsk_live_[0-9A-Za-z]+\\b/g, /-----BEGIN [A-Z ]*PRIVATE KEY-----/g];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countClientSecretEnvReferenceSignals(code: string): number {\n const useClientCount = /^\\s*['\"]use client['\"]/m.test(code)\n ? countSensitiveEnvReferences(code, ['process.env.'])\n : 0;\n\n return (\n countSensitiveEnvReferences(code, ['import.meta.env.', 'process.env.NEXT_PUBLIC_']) +\n useClientCount\n );\n}\n\nfunction countSensitiveEnvReferences(code: string, prefixes: string[]): number {\n let count = 0;\n\n for (const prefix of prefixes) {\n for (\n let index = code.indexOf(prefix);\n index !== -1;\n index = code.indexOf(prefix, index + prefix.length)\n ) {\n const envName = readEnvIdentifier(code, index + prefix.length);\n if (envName && isSensitiveEnvName(envName)) {\n count += 1;\n }\n }\n }\n\n return count;\n}\n\nfunction readEnvIdentifier(code: string, startIndex: number): string {\n let cursor = startIndex;\n while (cursor < code.length && isEnvIdentifierChar(code[cursor]!)) {\n cursor += 1;\n }\n return code.slice(startIndex, cursor);\n}\n\nfunction isEnvIdentifierChar(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n char === '_' || (codePoint >= 48 && codePoint <= 57) || (codePoint >= 65 && codePoint <= 90)\n );\n}\n\nfunction isSensitiveEnvName(envName: string): boolean {\n return (\n envName.includes('SERVICE_ROLE') ||\n envName.includes('SECRET') ||\n envName.includes('PRIVATE_KEY')\n );\n}\n\nfunction countLocalhostEndpointSignals(code: string): number {\n return (\n code.match(\n /\\b(?:(?:https?|wss?):\\/\\/)?(?:localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)(?::\\d+)?(?:\\/[^\\s'\"`]*)?/gi,\n )?.length ?? 0\n );\n}\n\nfunction countWildcardPostMessageSignals(code: string): number {\n return code.match(/\\bpostMessage\\s*\\([^)]*,\\s*['\"`]\\*['\"`]/g)?.length ?? 0;\n}\n\nconst DYNAMIC_GEOMETRY_STYLE_PROPS = new Set([\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'transform',\n 'transformOrigin',\n 'opacity',\n 'offsetPath',\n 'offsetDistance',\n 'cx',\n 'cy',\n 'x',\n 'y',\n]);\n\nfunction getJsxAttributeExpression(\n initializer: ts.JsxAttribute['initializer'],\n): ts.Expression | null {\n if (!initializer || !ts.isJsxExpression(initializer)) return null;\n return initializer.expression ?? null;\n}\n\nfunction getStylePropertyName(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n if (ts.isComputedPropertyName(name)) {\n return getExpressionLiteralValue(name.expression);\n }\n return null;\n}\n\nfunction unwrapStyleExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current) ||\n ts.isSatisfiesExpression(current)\n ) {\n current = current.expression;\n }\n return current;\n}\n\nfunction isDynamicStyleValue(expression: ts.Expression): boolean {\n const unwrapped = unwrapStyleExpression(expression);\n if (\n ts.isStringLiteral(unwrapped) ||\n ts.isNoSubstitutionTemplateLiteral(unwrapped) ||\n ts.isNumericLiteral(unwrapped) ||\n unwrapped.kind === ts.SyntaxKind.TrueKeyword ||\n unwrapped.kind === ts.SyntaxKind.FalseKeyword ||\n unwrapped.kind === ts.SyntaxKind.NullKeyword\n ) {\n return false;\n }\n return true;\n}\n\nfunction isAllowedInlineStyleObject(objectLiteral: ts.ObjectLiteralExpression): boolean {\n let sawGeometryProperty = false;\n let sawDynamicGeometryValue = false;\n\n for (const property of objectLiteral.properties) {\n if (!ts.isPropertyAssignment(property)) return false;\n\n const propertyName = getStylePropertyName(property.name);\n if (!propertyName) return false;\n\n if (propertyName.startsWith('--d-')) {\n continue;\n }\n\n if (!DYNAMIC_GEOMETRY_STYLE_PROPS.has(propertyName)) {\n return false;\n }\n\n sawGeometryProperty = true;\n if (isDynamicStyleValue(property.initializer)) {\n sawDynamicGeometryValue = true;\n }\n }\n\n return !sawGeometryProperty || sawDynamicGeometryValue;\n}\n\nfunction isAllowedInlineStyleAttribute(\n attribute: ts.JsxAttribute,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): boolean {\n const expression = getJsxAttributeExpression(attribute.initializer);\n if (!expression) return false;\n\n const resolved = resolveObjectLiteralExpression(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n );\n\n return resolved ? isAllowedInlineStyleObject(resolved.objectLiteral) : false;\n}\n\nfunction analyzeAstSignals(filePath: string, code: string): AstCritiqueSignals {\n const sourceFile = ts.createSourceFile(\n filePath,\n code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(filePath),\n );\n const signals: AstCritiqueSignals = {\n inlineStyleAttributeCount: 0,\n dangerousHtmlCount: 0,\n rawHtmlInjectionCount: 0,\n dynamicEvalCount: 0,\n hardcodedSecretSignalCount: countHardcodedSecretSignals(code),\n clientSecretEnvReferenceCount: countClientSecretEnvReferenceSignals(code),\n localhostEndpointCount: countLocalhostEndpointSignals(code),\n wildcardPostMessageCount: countWildcardPostMessageSignals(code),\n windowOpenWithoutNoopenerCount: 0,\n messageListenerWithoutOriginCheckCount: 0,\n externalIframeWithoutSandboxCount: 0,\n insecureExternalIframeCount: 0,\n insecureFormActionCount: 0,\n insecureAuthFormMethodCount: 0,\n insecureTransportEndpointCount: 0,\n iconOnlyButtonWithoutLabelCount: 0,\n iconOnlyLinkWithoutLabelCount: 0,\n clickableNonSemanticCount: 0,\n imageWithoutAltCount: 0,\n insecureExternalImageCount: 0,\n iframeWithoutTitleCount: 0,\n dialogWithoutLabelCount: 0,\n dialogWithoutModalHintCount: 0,\n tableWithoutHeaderCount: 0,\n tableWithoutCaptionCount: 0,\n unlabeledNavigationLandmarkCount: 0,\n multipleMainLandmarkCount: 0,\n externalBlankLinkWithoutRelCount: 0,\n formControlWithoutLabelCount: 0,\n placeholderNavigationTargetCount: 0,\n protectedSurfaceSignalCount: countProtectedSurfaceSignals(code),\n skipNavSignalCount: countSkipNavSignals(code),\n skipNavTargetIds: [],\n mainLandmarkCount: 0,\n mainLandmarkIds: [],\n emailAutocompleteMissingCount: 0,\n passwordAutocompleteMissingCount: 0,\n otpAutocompleteMissingCount: 0,\n authAutocompleteDisabledCount: 0,\n authAutocompleteSemanticMismatchCount: 0,\n authInputTypeMismatchCount: 0,\n authInputWithoutNameCount: 0,\n buttonInFormWithoutTypeCount: 0,\n authFormWithoutSubmitCount: 0,\n authEntrySignalCount: countAuthEntrySignals(code),\n authSessionSignalCount: countAuthSessionSignals(code),\n authLoadingSignalCount: countAuthLoadingSignals(code),\n authProtectedLoadingRenderCount: countAuthProtectedLoadingRenderSignals(code),\n authBlankLoadingRenderCount: countAuthBlankLoadingRenderSignals(code),\n authAnonymousLoadingRedirectCount: countAuthAnonymousLoadingRedirectSignals(code),\n authProtectedUnauthenticatedRenderCount: countAuthProtectedUnauthenticatedRenderSignals(code),\n authProtectedRedirectSignalCount: countAuthProtectedRedirectSignals(code),\n authAnonymousRedirectSignalCount: countAuthAnonymousRedirectSignals(code),\n authOpenRedirectSignalCount: countAuthOpenRedirectSignals(code),\n authExternalRedirectSignalCount: 0,\n authProviderStateMissingCount: 0,\n authProviderPkceMissingCount: 0,\n authProviderNonceMissingCount: 0,\n authStorageWriteCount: 0,\n authStorageClearCount: countAuthStorageClearSignals(code),\n authCookieWriteCount: 0,\n authCookieClearCount: countAuthCookieClearSignals(code),\n authCookieMissingHardeningCount: 0,\n authHeaderWriteCount: 0,\n authHeaderClearCount: 0,\n authCacheClientCount: countAuthCacheClientSignals(code),\n authCacheClearCount: countAuthCacheClearSignals(code),\n authRefreshSignalCount: countAuthRefreshSignals(code),\n authRefreshClearCount: countAuthRefreshClearSignals(code),\n authGuardSignalCount: countAuthGuardSignals(code),\n authExitSignalCount: countAuthExitSignals(code),\n authSessionTeardownSignalCount: countAuthSessionTeardownSignals(code),\n };\n const namedFunctionDeclarations = collectNamedFunctionLikeDeclarations(sourceFile);\n const namedExpressionInitializers = collectNamedExpressionInitializers(sourceFile);\n const namedPropertyAliases = collectNamedPropertyAliases(sourceFile);\n const labelForIds = collectLabelForIds(sourceFile);\n let navigationLandmarkCount = 0;\n let unlabeledNavigationLandmarkCount = 0;\n\n const walk = (node: ts.Node) => {\n if (ts.isJsxAttribute(node)) {\n if (isPropertyNamed(node.name, 'style') && node.initializer) {\n if (\n !isAllowedInlineStyleAttribute(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.inlineStyleAttributeCount += 1;\n }\n }\n if (\n isPropertyNamed(node.name, 'dangerouslySetInnerHTML') &&\n !isSafeJsonLdDangerouslySetInnerHtml(node)\n ) {\n signals.dangerousHtmlCount += 1;\n }\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n node.initializer &&\n ts.isJsxExpression(node.initializer) &&\n expressionContainsOpenRedirectSource(\n node.initializer.expression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderUrlMissingState(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderStateMissingCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderCodeFlowMissingPkce(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderPkceMissingCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderIdTokenFlowMissingNonce(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isPropertyNamed(node.left.name, 'innerHTML', 'outerHTML')\n ) {\n signals.rawHtmlInjectionCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n expressionContainsOpenRedirectSource(\n node.right,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.right))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isExternalUrl(getExpressionLiteralValue(node.right))\n ) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(getExpressionLiteralValue(node.right))) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(getExpressionLiteralValue(node.right))) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(getExpressionLiteralValue(node.right))) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n expressionContainsOpenRedirectSource(\n node.right,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isPropertyNamed(node.left.name, 'onmessage')\n ) {\n const handler = resolveFunctionLikeHandler(node.right, namedFunctionDeclarations);\n if (handler && !functionLikeReferencesOrigin(handler)) {\n signals.messageListenerWithoutOriginCheckCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isBrowserStorageObject(node.left.expression) &&\n /(?:token|auth|jwt|session)/i.test(node.left.name.text)\n ) {\n signals.authStorageWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isElementAccessExpression(node.left) &&\n isBrowserStorageObject(node.left.expression) &&\n isAuthStorageKeyLiteral(node.left.argumentExpression)\n ) {\n signals.authStorageWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n isCookiePropertyAccess(node.left) &&\n hasAuthCredentialText(node.right, sourceFile)\n ) {\n signals.authCookieWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n isAuthorizationHeaderAccess(node.left)\n ) {\n if (isHeaderClearValue(node.right)) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n\n if (ts.isPropertyAssignment(node) && isAuthorizationHeaderName(node.name)) {\n if (isHeaderClearValue(node.initializer)) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n\n if (ts.isDeleteExpression(node) && isAuthorizationHeaderAccess(node.expression)) {\n signals.authHeaderClearCount += 1;\n }\n\n if (isCallLikeExpression(node)) {\n const firstArgumentLiteral = getExpressionLiteralValue(node.arguments[0]);\n const secondArgumentLiteral = getExpressionLiteralValue(node.arguments[1]);\n const routeTransitionTargetExpression = getRouteTransitionTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const routeTransitionTargetLiteral = getExpressionLiteralValue(\n routeTransitionTargetExpression,\n );\n const locationMutationTargetExpression = getLocationMutationTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const locationMutationTargetLiteral = getExpressionLiteralValue(\n locationMutationTargetExpression,\n );\n const windowOpenTargetExpression = getWindowOpenTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const windowOpenTargetLiteral = getExpressionLiteralValue(windowOpenTargetExpression);\n if (ts.isIdentifier(node.expression) && node.expression.text === 'eval') {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n ((ts.isIdentifier(node.expression) &&\n ['setTimeout', 'setInterval'].includes(node.expression.text)) ||\n (ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'window' &&\n isPropertyNamed(node.expression.name, 'setTimeout', 'setInterval'))) &&\n typeof firstArgumentLiteral === 'string'\n ) {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n (isFetchLikeCall(node) || isAxiosLikeCall(node)) &&\n isInsecureTransportUrl(firstArgumentLiteral)\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n routeTransitionTargetExpression &&\n expressionContainsOpenRedirectSource(\n routeTransitionTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n expressionLooksLikeRouteTransitionCall(\n node.expression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isExternalUrl(routeTransitionTargetLiteral ?? firstArgumentLiteral)\n ) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(routeTransitionTargetLiteral ?? firstArgumentLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (\n isAuthProviderCodeFlowMissingPkce(routeTransitionTargetLiteral ?? firstArgumentLiteral)\n ) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (\n isAuthProviderIdTokenFlowMissingNonce(\n routeTransitionTargetLiteral ?? firstArgumentLiteral,\n )\n ) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n isAxiosConfigCall(node) &&\n isInsecureTransportUrl(\n getObjectLiteralStringPropertyValue(node.arguments[0], 'url', 'baseURL', 'baseUrl'),\n )\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n locationMutationTargetExpression &&\n expressionContainsOpenRedirectSource(\n locationMutationTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n locationMutationTargetExpression &&\n isInsecureTransportUrl(locationMutationTargetLiteral)\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (locationMutationTargetExpression && isExternalUrl(locationMutationTargetLiteral)) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(locationMutationTargetLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(locationMutationTargetLiteral)) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(locationMutationTargetLiteral)) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n windowOpenTargetExpression &&\n expressionContainsOpenRedirectSource(\n windowOpenTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (windowOpenTargetExpression && isExternalUrl(windowOpenTargetLiteral)) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(windowOpenTargetLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(windowOpenTargetLiteral)) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(windowOpenTargetLiteral)) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'postMessage') &&\n secondArgumentLiteral === '*'\n ) {\n signals.wildcardPostMessageCount += 1;\n }\n\n if (isAddEventListenerCall(node) && firstArgumentLiteral === 'message') {\n const handler = resolveFunctionLikeHandler(node.arguments[1], namedFunctionDeclarations);\n if (handler && !functionLikeReferencesOrigin(handler)) {\n signals.messageListenerWithoutOriginCheckCount += 1;\n }\n }\n\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'setHeader', 'append', 'set') &&\n isSetCookieHeaderName(node.arguments[0])\n ) {\n const cookieStrings = collectCookieHeaderStrings(node.arguments[1]);\n const authCookieStrings = cookieStrings.filter(cookieHeaderStringLooksAuthLike);\n if (authCookieStrings.length > 0) {\n signals.authCookieWriteCount += authCookieStrings.length;\n signals.authCookieMissingHardeningCount += authCookieStrings.filter(\n (value) => !cookieHeaderStringHasHardening(value),\n ).length;\n } else {\n const cookieHeaderSource = node.arguments[1]?.getText(sourceFile) ?? '';\n if (cookieHeaderStringLooksAuthLike(cookieHeaderSource)) {\n signals.authCookieWriteCount += 1;\n if (!cookieHeaderStringHasHardening(cookieHeaderSource)) {\n signals.authCookieMissingHardeningCount += 1;\n }\n }\n }\n }\n\n if (\n ((ts.isIdentifier(node.expression) && node.expression.text === 'open') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'window' &&\n isPropertyNamed(node.expression.name, 'open'))) &&\n secondArgumentLiteral === '_blank'\n ) {\n const featureLiteral = getExpressionLiteralValue(node.arguments[2])?.toLowerCase() ?? '';\n if (!featureLiteral.includes('noopener') || !featureLiteral.includes('noreferrer')) {\n signals.windowOpenWithoutNoopenerCount += 1;\n }\n }\n\n if (ts.isPropertyAccessExpression(node.expression)) {\n if (isPropertyNamed(node.expression.name, 'insertAdjacentHTML')) {\n signals.rawHtmlInjectionCount += 1;\n }\n if (\n isBrowserStorageObject(node.expression.expression) &&\n isPropertyNamed(node.expression.name, 'setItem') &&\n isAuthStorageKeyLiteral(node.arguments[0])\n ) {\n signals.authStorageWriteCount += 1;\n }\n if (isCookieMutationSetCall(node)) {\n const firstArgument = node.arguments[0];\n const isObjectConfigCall = ts.isObjectLiteralExpression(firstArgument);\n const isAuthCookieWrite = isObjectConfigCall\n ? objectLiteralLooksLikeAuthCookieConfig(firstArgument, sourceFile)\n : expressionLooksLikeAuthCookieName(firstArgument, sourceFile);\n if (isAuthCookieWrite) {\n signals.authCookieWriteCount += 1;\n const hardeningSource = isObjectConfigCall ? firstArgument : node.arguments[2];\n if (!hasExplicitAuthCookieHardening(hardeningSource)) {\n signals.authCookieMissingHardeningCount += 1;\n }\n }\n }\n if (\n isPropertyNamed(node.expression.name, 'delete') &&\n node.arguments.length > 0 &&\n isAuthorizationHeaderName(node.arguments[0])\n ) {\n signals.authHeaderClearCount += 1;\n }\n if (\n (isPropertyNamed(node.expression.name, 'set') ||\n isPropertyNamed(node.expression.name, 'append')) &&\n node.arguments.length > 0 &&\n isAuthorizationHeaderName(node.arguments[0])\n ) {\n if (isHeaderClearValue(node.arguments[1])) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n if (\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'document' &&\n isPropertyNamed(node.expression.name, 'write')\n ) {\n signals.rawHtmlInjectionCount += 1;\n }\n if (isPropertyNamed(node.expression.name, 'eval')) {\n signals.dynamicEvalCount += 1;\n }\n }\n }\n\n if (\n ts.isNewExpression(node) &&\n isRealtimeTransportConstructor(node) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.arguments?.[0]))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n ts.isNewExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'Function'\n ) {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n ts.isNewExpression(node) &&\n ts.isIdentifier(node.expression) &&\n ['WebSocket', 'EventSource'].includes(node.expression.text) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.arguments?.[0]))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (ts.isJsxSelfClosingElement(node)) {\n const tagName = getJsxTagName(node);\n if (hasMainLandmarkSignal(node.attributes, tagName)) {\n signals.mainLandmarkCount += 1;\n }\n if (isNavigationLandmark(tagName, node.attributes)) {\n navigationLandmarkCount += 1;\n if (!hasNavigationLabel(node.attributes)) {\n unlabeledNavigationLandmarkCount += 1;\n }\n }\n const mainLandmarkId = getMainLandmarkId(node.attributes, tagName);\n if (mainLandmarkId && !signals.mainLandmarkIds.includes(mainLandmarkId)) {\n signals.mainLandmarkIds.push(mainLandmarkId);\n }\n const skipNavTargetId = getSkipNavTargetId(node.attributes, tagName);\n if (skipNavTargetId && !signals.skipNavTargetIds.includes(skipNavTargetId)) {\n signals.skipNavTargetIds.push(skipNavTargetId);\n }\n if (\n tagName === 'button' &&\n hasAncestorJsxTag(node, 'form') &&\n !getJsxAttribute(node.attributes, 'type')\n ) {\n signals.buttonInFormWithoutTypeCount += 1;\n }\n if (tagName === 'button' && !hasAccessibleLabel(node.attributes, '')) {\n signals.iconOnlyButtonWithoutLabelCount += 1;\n }\n if (isLinkLikeTag(tagName) && !hasAccessibleLabel(node.attributes, '')) {\n signals.iconOnlyLinkWithoutLabelCount += 1;\n }\n if (isImageLikeTag(tagName) && !getJsxAttribute(node.attributes, 'alt')) {\n signals.imageWithoutAltCount += 1;\n }\n if (isImageSourceLikeTag(tagName) && isInsecureExternalImage(node.attributes)) {\n signals.insecureExternalImageCount += 1;\n }\n if (tagName === 'iframe' && !getJsxAttribute(node.attributes, 'title')) {\n signals.iframeWithoutTitleCount += 1;\n }\n if (isDialogLikeElement(node.attributes, tagName) && !hasDialogLabel(node.attributes)) {\n signals.dialogWithoutLabelCount += 1;\n }\n if (\n isDialogLikeElement(node.attributes, tagName) &&\n !hasDialogModalHint(node.attributes, tagName)\n ) {\n signals.dialogWithoutModalHintCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isExternalUrl(getJsxAttributeLiteralValue(getJsxAttribute(node.attributes, 'src'))) &&\n !getJsxAttribute(node.attributes, 'sandbox')\n ) {\n signals.externalIframeWithoutSandboxCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isInsecureExternalUrl(getJsxAttributeLiteralValue(getJsxAttribute(node.attributes, 'src')))\n ) {\n signals.insecureExternalIframeCount += 1;\n }\n if (tagName === 'form' && hasInsecureFormAction(node.attributes)) {\n signals.insecureFormActionCount += 1;\n }\n if (\n isNonSemanticInteractiveTag(tagName) &&\n getJsxAttribute(node.attributes, 'onClick') &&\n !getJsxAttribute(node.attributes, 'role') &&\n !getJsxAttribute(node.attributes, 'tabIndex')\n ) {\n signals.clickableNonSemanticCount += 1;\n }\n if (isLinkLikeTag(tagName) && isExternalLinkTargetBlankWithoutRel(node.attributes)) {\n signals.externalBlankLinkWithoutRelCount += 1;\n }\n if (hasPlaceholderNavigationTarget(node.attributes)) {\n signals.placeholderNavigationTargetCount += 1;\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(node.attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const hasAutocomplete = Boolean(autocompleteValue);\n if (inputType === 'email' && !hasAutocomplete) {\n signals.emailAutocompleteMissingCount += 1;\n }\n if (inputType === 'password' && !hasAutocomplete) {\n signals.passwordAutocompleteMissingCount += 1;\n }\n if (hasOtpAutocompleteIssue(node.attributes)) {\n signals.otpAutocompleteMissingCount += 1;\n }\n if ((inputType === 'email' || inputType === 'password') && autocompleteValue === 'off') {\n signals.authAutocompleteDisabledCount += 1;\n }\n if (hasAuthAutocompleteSemanticMismatch(node.attributes)) {\n signals.authAutocompleteSemanticMismatchCount += 1;\n }\n if (hasAuthInputTypeMismatch(node.attributes)) {\n signals.authInputTypeMismatchCount += 1;\n }\n if (\n hasAncestorJsxTag(node, 'form') &&\n isAuthLikeInputAttributes(node.attributes) &&\n !getJsxAttribute(node.attributes, 'name')\n ) {\n signals.authInputWithoutNameCount += 1;\n }\n }\n if (!hasFormControlLabel(node, tagName, node.attributes, labelForIds, '')) {\n signals.formControlWithoutLabelCount += 1;\n }\n }\n\n if (ts.isJsxElement(node)) {\n const tagName = getJsxTagName(node.openingElement);\n const textContent = getJsxTextContent(node).replace(/\\s+/g, ' ').trim();\n\n if (hasMainLandmarkSignal(node.openingElement.attributes, tagName)) {\n signals.mainLandmarkCount += 1;\n }\n if (isNavigationLandmark(tagName, node.openingElement.attributes)) {\n navigationLandmarkCount += 1;\n if (!hasNavigationLabel(node.openingElement.attributes)) {\n unlabeledNavigationLandmarkCount += 1;\n }\n }\n const mainLandmarkId = getMainLandmarkId(node.openingElement.attributes, tagName);\n if (mainLandmarkId && !signals.mainLandmarkIds.includes(mainLandmarkId)) {\n signals.mainLandmarkIds.push(mainLandmarkId);\n }\n const skipNavTargetId = getSkipNavTargetId(node.openingElement.attributes, tagName);\n if (skipNavTargetId && !signals.skipNavTargetIds.includes(skipNavTargetId)) {\n signals.skipNavTargetIds.push(skipNavTargetId);\n }\n if (\n tagName === 'button' &&\n hasAncestorJsxTag(node, 'form') &&\n !getJsxAttribute(node.openingElement.attributes, 'type')\n ) {\n signals.buttonInFormWithoutTypeCount += 1;\n }\n if (\n tagName === 'button' &&\n !hasAccessibleLabel(node.openingElement.attributes, textContent)\n ) {\n signals.iconOnlyButtonWithoutLabelCount += 1;\n }\n if (\n isLinkLikeTag(tagName) &&\n !hasAccessibleLabel(node.openingElement.attributes, textContent)\n ) {\n signals.iconOnlyLinkWithoutLabelCount += 1;\n }\n if (isImageLikeTag(tagName) && !getJsxAttribute(node.openingElement.attributes, 'alt')) {\n signals.imageWithoutAltCount += 1;\n }\n if (\n isImageSourceLikeTag(tagName) &&\n isInsecureExternalImage(node.openingElement.attributes)\n ) {\n signals.insecureExternalImageCount += 1;\n }\n if (tagName === 'iframe' && !getJsxAttribute(node.openingElement.attributes, 'title')) {\n signals.iframeWithoutTitleCount += 1;\n }\n if (\n isDialogLikeElement(node.openingElement.attributes, tagName) &&\n !hasDialogLabel(node.openingElement.attributes)\n ) {\n signals.dialogWithoutLabelCount += 1;\n }\n if (\n isDialogLikeElement(node.openingElement.attributes, tagName) &&\n !hasDialogModalHint(node.openingElement.attributes, tagName)\n ) {\n signals.dialogWithoutModalHintCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isExternalUrl(\n getJsxAttributeLiteralValue(getJsxAttribute(node.openingElement.attributes, 'src')),\n ) &&\n !getJsxAttribute(node.openingElement.attributes, 'sandbox')\n ) {\n signals.externalIframeWithoutSandboxCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isInsecureExternalUrl(\n getJsxAttributeLiteralValue(getJsxAttribute(node.openingElement.attributes, 'src')),\n )\n ) {\n signals.insecureExternalIframeCount += 1;\n }\n if (tagName === 'form' && hasInsecureFormAction(node.openingElement.attributes)) {\n signals.insecureFormActionCount += 1;\n }\n if (tagName === 'form' && hasInsecureAuthFormMethod(node)) {\n signals.insecureAuthFormMethodCount += 1;\n }\n if (tagName === 'form' && hasAuthFormWithoutSubmitControl(node)) {\n signals.authFormWithoutSubmitCount += 1;\n }\n if (tagName === 'table' && !jsxTreeHasTag(node, ['th'])) {\n signals.tableWithoutHeaderCount += 1;\n }\n if (tagName === 'table' && !jsxTreeHasTag(node, ['caption'])) {\n signals.tableWithoutCaptionCount += 1;\n }\n\n if (\n isNonSemanticInteractiveTag(tagName) &&\n getJsxAttribute(node.openingElement.attributes, 'onClick') &&\n !getJsxAttribute(node.openingElement.attributes, 'role') &&\n !getJsxAttribute(node.openingElement.attributes, 'tabIndex')\n ) {\n signals.clickableNonSemanticCount += 1;\n }\n if (\n isLinkLikeTag(tagName) &&\n isExternalLinkTargetBlankWithoutRel(node.openingElement.attributes)\n ) {\n signals.externalBlankLinkWithoutRelCount += 1;\n }\n if (hasPlaceholderNavigationTarget(node.openingElement.attributes)) {\n signals.placeholderNavigationTargetCount += 1;\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(node.openingElement.attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.openingElement.attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const hasAutocomplete = Boolean(autocompleteValue);\n if (inputType === 'email' && !hasAutocomplete) {\n signals.emailAutocompleteMissingCount += 1;\n }\n if (inputType === 'password' && !hasAutocomplete) {\n signals.passwordAutocompleteMissingCount += 1;\n }\n if (hasOtpAutocompleteIssue(node.openingElement.attributes)) {\n signals.otpAutocompleteMissingCount += 1;\n }\n if ((inputType === 'email' || inputType === 'password') && autocompleteValue === 'off') {\n signals.authAutocompleteDisabledCount += 1;\n }\n if (hasAuthAutocompleteSemanticMismatch(node.openingElement.attributes)) {\n signals.authAutocompleteSemanticMismatchCount += 1;\n }\n if (hasAuthInputTypeMismatch(node.openingElement.attributes)) {\n signals.authInputTypeMismatchCount += 1;\n }\n if (\n hasAncestorJsxTag(node, 'form') &&\n isAuthLikeInputAttributes(node.openingElement.attributes) &&\n !getJsxAttribute(node.openingElement.attributes, 'name')\n ) {\n signals.authInputWithoutNameCount += 1;\n }\n }\n if (\n !hasFormControlLabel(\n node,\n tagName,\n node.openingElement.attributes,\n labelForIds,\n textContent,\n )\n ) {\n signals.formControlWithoutLabelCount += 1;\n }\n }\n\n ts.forEachChild(node, walk);\n };\n\n walk(sourceFile);\n signals.unlabeledNavigationLandmarkCount =\n navigationLandmarkCount > 1 ? unlabeledNavigationLandmarkCount : 0;\n signals.multipleMainLandmarkCount = Math.max(0, signals.mainLandmarkCount - 1);\n return signals;\n}\n\nexport function critiqueSource({\n filePath,\n code,\n reviewPack = null,\n packManifest = null,\n treatmentsCss = '',\n adoptionMode = null,\n}: CritiqueSourceInput): FileCritiqueReport {\n const codeLower = code.toLowerCase();\n const astSignals = analyzeAstSignals(filePath, code);\n const focusAreas = resolveFocusAreas(reviewPack);\n const findings: VerificationFinding[] = [];\n const scores: VerificationScore[] = [];\n const antiPatternIds = new Set(reviewPack?.antiPatterns.map((entry) => entry.id) ?? []);\n const isContractOnly = adoptionMode === 'contract-only';\n\n const usedTreatments = TREATMENT_CLASSES.filter((token) => code.includes(token));\n if (isContractOnly) {\n scores.push({\n category: 'Styling Authority',\n focusArea: 'treatment-usage',\n score: 3,\n details:\n 'Contract-only adoption does not require Decantr d-* treatment classes in source files.',\n suggestions: [\n 'Codify project-owned component variants and local rules when button/card/surface drift needs mechanical enforcement.',\n ],\n });\n } else {\n const treatmentSuggestions = TREATMENT_CLASSES.filter((token) => !code.includes(token)).map(\n (token) => `Consider using \\`${token}\\` where appropriate.`,\n );\n scores.push({\n category: 'Treatment Usage',\n focusArea: 'treatment-usage',\n score: scoreRatio(usedTreatments.length, TREATMENT_CLASSES.length),\n details: `${usedTreatments.length}/${TREATMENT_CLASSES.length} base treatments used: ${usedTreatments.join(', ') || 'none'}`,\n suggestions: treatmentSuggestions,\n });\n if (focusAreas.includes('treatment-usage') && usedTreatments.length === 0) {\n findings.push(\n makeFinding({\n id: 'treatment-usage-missing',\n category: 'Treatment Usage',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'page-pattern-contract',\n 'section-pattern-coverage',\n ]),\n message: 'No Decantr treatment classes were detected in the reviewed file.',\n evidence: [\n filePath,\n 'Expected tokens include d-interactive, d-surface, d-data, d-control, d-section, d-annotation, d-label.',\n ],\n file: filePath,\n suggestedFix:\n 'Apply the compiled treatment vocabulary instead of hand-rolled utility styling.',\n }),\n );\n }\n }\n\n const decoratorNames = buildDecoratorInventory(treatmentsCss);\n const usedDecorators = decoratorNames.filter((name) => code.includes(name));\n const usesCssVars = code.includes('var(--');\n if (isContractOnly) {\n scores.push({\n category: 'Theme Consistency',\n focusArea: 'theme-consistency',\n score: usesCssVars ? 4 : 3,\n details: `Contract-only mode: Decantr decorators are not required; CSS vars: ${usesCssVars ? 'yes' : 'no'}.`,\n suggestions: [\n 'Use the app design system, Tailwind theme, Sass variables, component variants, or accepted local rules as the styling authority.',\n ],\n });\n } else {\n scores.push({\n category: 'Theme Consistency',\n focusArea: 'theme-consistency',\n score:\n decoratorNames.length > 0\n ? scoreRatio((usedDecorators.length > 0 ? 1 : 0) + (usesCssVars ? 1 : 0), 2)\n : usesCssVars\n ? 4\n : 2,\n details: `Decorators used: ${usedDecorators.join(', ') || 'none'}; CSS vars: ${usesCssVars ? 'yes' : 'no'}`,\n suggestions: [\n ...(!usesCssVars ? ['Prefer CSS variable references over hardcoded visual values.'] : []),\n ...(decoratorNames.length > 0 && usedDecorators.length === 0\n ? ['Use theme decorators from treatments.css when they fit the component intent.']\n : []),\n ],\n });\n if (focusAreas.includes('theme-consistency') && !usesCssVars && usedDecorators.length === 0) {\n findings.push(\n makeFinding({\n id: 'theme-consistency-weak',\n category: 'Theme Consistency',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'theme-consistency',\n 'mutation-theme-contract',\n ]),\n message:\n 'The file does not appear to use theme decorators or CSS variables from the compiled contract.',\n evidence: [\n filePath,\n `Decorators available: ${decoratorNames.slice(0, 5).join(', ') || 'none'}`,\n ],\n file: filePath,\n suggestedFix:\n 'Anchor styling to tokens.css and treatments.css instead of local hardcoded values.',\n }),\n );\n }\n }\n\n const hasAria = codeLower.includes('aria-') || codeLower.includes('role=');\n const hasFocus = codeLower.includes('focus-visible') || codeLower.includes('focusvisible');\n const hasKeyboard = codeLower.includes('onkeydown') || codeLower.includes('onkeyup');\n const iconButtonIssues = astSignals.iconOnlyButtonWithoutLabelCount;\n const iconLinkIssues = astSignals.iconOnlyLinkWithoutLabelCount;\n const clickableNonSemanticIssues = astSignals.clickableNonSemanticCount;\n const unlabeledNavigationLandmarkIssues = astSignals.unlabeledNavigationLandmarkCount;\n const multipleMainLandmarkIssues = astSignals.multipleMainLandmarkCount;\n const imageAltIssues = astSignals.imageWithoutAltCount;\n const iframeTitleIssues = astSignals.iframeWithoutTitleCount;\n const dialogLabelIssues = astSignals.dialogWithoutLabelCount;\n const dialogModalHintIssues = astSignals.dialogWithoutModalHintCount;\n const tableHeaderIssues = astSignals.tableWithoutHeaderCount;\n const tableCaptionIssues = astSignals.tableWithoutCaptionCount;\n const formControlLabelIssues = astSignals.formControlWithoutLabelCount;\n scores.push({\n category: 'Accessibility',\n focusArea: 'accessibility',\n score: Math.max(\n 1,\n Math.min(\n 5,\n 1 +\n (hasAria ? 2 : 0) +\n (hasFocus ? 1 : 0) +\n (hasKeyboard ? 1 : 0) -\n (iconButtonIssues > 0 ? 1 : 0) -\n (iconLinkIssues > 0 ? 1 : 0) -\n (clickableNonSemanticIssues > 0 ? 1 : 0) -\n (unlabeledNavigationLandmarkIssues > 0 ? 1 : 0) -\n (multipleMainLandmarkIssues > 0 ? 1 : 0) -\n (imageAltIssues > 0 ? 1 : 0) -\n (iframeTitleIssues > 0 ? 1 : 0) -\n (dialogLabelIssues > 0 ? 1 : 0) -\n (dialogModalHintIssues > 0 ? 1 : 0) -\n (tableHeaderIssues > 0 ? 1 : 0) -\n (tableCaptionIssues > 0 ? 1 : 0) -\n (formControlLabelIssues > 0 ? 1 : 0),\n ),\n ),\n details: `ARIA: ${hasAria ? 'yes' : 'no'}, Focus: ${hasFocus ? 'yes' : 'no'}, Keyboard: ${hasKeyboard ? 'yes' : 'no'}, unlabeled icon buttons: ${iconButtonIssues}, unlabeled icon links: ${iconLinkIssues}, clickable non-semantic elements: ${clickableNonSemanticIssues}, unlabeled navigation landmarks: ${unlabeledNavigationLandmarkIssues}, extra main landmarks: ${multipleMainLandmarkIssues}, images without alt: ${imageAltIssues}, iframes without title: ${iframeTitleIssues}, dialogs without label: ${dialogLabelIssues}, dialogs without modal hint: ${dialogModalHintIssues}, tables without headers: ${tableHeaderIssues}, tables without caption: ${tableCaptionIssues}, form controls without labels: ${formControlLabelIssues}`,\n suggestions: [\n ...(!hasAria ? ['Add ARIA roles or labels to interactive regions.'] : []),\n ...(!hasFocus ? ['Add visible focus styling for keyboard navigation.'] : []),\n ...(!hasKeyboard\n ? ['Add keyboard handling where interactive behavior depends on pointer events.']\n : []),\n ...(iconButtonIssues > 0\n ? ['Add accessible labels to icon-only buttons via visible text or aria-label.']\n : []),\n ...(iconLinkIssues > 0\n ? ['Add accessible labels to icon-only links via visible text or aria-label.']\n : []),\n ...(clickableNonSemanticIssues > 0\n ? [\n 'Use semantic interactive elements or add role/tabIndex and keyboard handling to clickable non-semantic containers.',\n ]\n : []),\n ...(unlabeledNavigationLandmarkIssues > 0\n ? [\n 'Give multiple navigation landmarks distinct labels so assistive technologies can differentiate primary, sidebar, and utility nav regions.',\n ]\n : []),\n ...(multipleMainLandmarkIssues > 0\n ? ['Keep only one primary main landmark per rendered page or shell surface.']\n : []),\n ...(imageAltIssues > 0\n ? ['Add alt text to meaningful images and use alt=\"\" only for decorative ones.']\n : []),\n ...(iframeTitleIssues > 0\n ? [\n 'Add descriptive title attributes to embedded iframes so assistive technologies can identify their purpose.',\n ]\n : []),\n ...(dialogLabelIssues > 0\n ? ['Give dialogs an explicit accessible name via aria-label, aria-labelledby, or title.']\n : []),\n ...(dialogModalHintIssues > 0\n ? [\n 'Expose modal intent on dialog surfaces with aria-modal=\"true\" or a native open dialog contract.',\n ]\n : []),\n ...(tableHeaderIssues > 0\n ? [\n 'Give tables explicit header cells so assistive technologies can map data cells to column or row labels.',\n ]\n : []),\n ...(tableCaptionIssues > 0\n ? [\n 'Add a caption or equivalent programmatic summary so the table purpose is clear before users navigate its cells.',\n ]\n : []),\n ...(formControlLabelIssues > 0\n ? ['Add programmatic labels to form controls instead of relying on placeholders alone.']\n : []),\n ],\n });\n if (focusAreas.includes('accessibility')) {\n if (!hasAria) {\n findings.push(\n makeFinding({\n id: 'accessibility-aria-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'No ARIA roles or labels were detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Add ARIA metadata to interactive or landmark elements.',\n }),\n );\n }\n if (!hasKeyboard) {\n findings.push(\n makeFinding({\n id: 'accessibility-keyboard-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', ['review-remediation']),\n message: 'No keyboard interaction handlers were detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Verify interactive elements remain usable from the keyboard.',\n }),\n );\n }\n if (iconButtonIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-icon-button-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Icon-only button elements were detected without an accessible label.',\n evidence: [filePath, `Unlabeled icon buttons: ${iconButtonIssues}`],\n file: filePath,\n suggestedFix:\n 'Add visible text or an aria-label/aria-labelledby attribute to icon-only buttons.',\n }),\n );\n }\n if (iconLinkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-icon-link-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Icon-only link elements were detected without an accessible label.',\n evidence: [filePath, `Unlabeled icon links: ${iconLinkIssues}`],\n file: filePath,\n suggestedFix:\n 'Add visible text or an aria-label/aria-labelledby attribute to icon-only links.',\n }),\n );\n }\n if (clickableNonSemanticIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-clickable-non-semantic',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message:\n 'Clickable non-semantic elements were detected without the semantic/keyboard affordances accessibility tools expect.',\n evidence: [\n filePath,\n `Clickable non-semantic elements without role/tabIndex: ${clickableNonSemanticIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Prefer semantic controls like button/link, or add role, tabIndex, and keyboard handlers to non-semantic interactive containers.',\n }),\n );\n }\n if (unlabeledNavigationLandmarkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-navigation-landmark-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message:\n 'Multiple navigation landmarks were detected without distinct accessible labels.',\n evidence: [\n filePath,\n `Unlabeled navigation landmarks: ${unlabeledNavigationLandmarkIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Label multiple nav regions with aria-label or aria-labelledby so assistive technologies can distinguish primary, sidebar, and utility navigation.',\n }),\n );\n }\n if (multipleMainLandmarkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-multiple-main-landmarks',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Multiple main landmarks were detected in the reviewed file.',\n evidence: [\n filePath,\n `Extra main landmarks beyond the first: ${multipleMainLandmarkIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render one primary `<main>` landmark per page or shell surface and move secondary regions into section/article/div containers instead.',\n }),\n );\n }\n if (imageAltIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-image-alt-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Image elements were detected without an `alt` attribute.',\n evidence: [filePath, `Images without alt: ${imageAltIssues}`],\n file: filePath,\n suggestedFix:\n 'Add meaningful alt text for informative images, or use alt=\"\" when the image is purely decorative.',\n }),\n );\n }\n if (iframeTitleIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-iframe-title-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Iframe elements were detected without a descriptive `title` attribute.',\n evidence: [filePath, `Iframes without title: ${iframeTitleIssues}`],\n file: filePath,\n suggestedFix:\n 'Add a concise title attribute to each iframe so assistive technologies can describe the embedded surface.',\n }),\n );\n }\n if (dialogLabelIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-dialog-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Dialog surfaces were detected without an explicit accessible name.',\n evidence: [\n filePath,\n `Dialogs without aria-label/aria-labelledby/title: ${dialogLabelIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Name dialogs with aria-label, aria-labelledby, or title so assistive technologies can announce the dialog context.',\n }),\n );\n }\n if (dialogModalHintIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-dialog-modal-hint-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message: 'Dialog surfaces were detected without an explicit modal hint.',\n evidence: [filePath, `Dialogs without aria-modal/open signal: ${dialogModalHintIssues}`],\n file: filePath,\n suggestedFix:\n 'Expose modal intent with aria-modal=\"true\" for custom dialogs, or rely on a reviewed native dialog/open contract.',\n }),\n );\n }\n if (tableHeaderIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-table-headers-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Table markup was detected without header cells.',\n evidence: [filePath, `Tables without <th> headers: ${tableHeaderIssues}`],\n file: filePath,\n suggestedFix:\n 'Add <th> cells with appropriate scope or otherwise expose explicit table headers so assistive technologies can map the data grid correctly.',\n }),\n );\n }\n if (tableCaptionIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-table-caption-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message: 'Table markup was detected without a caption or programmatic summary.',\n evidence: [filePath, `Tables without caption: ${tableCaptionIssues}`],\n file: filePath,\n suggestedFix:\n 'Add a <caption> or equivalent summary so users understand the table purpose before navigating its cells.',\n }),\n );\n }\n if (formControlLabelIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-form-control-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'review-remediation',\n ]),\n message: 'Form controls were detected without an associated accessible label.',\n evidence: [filePath, `Form controls without labels: ${formControlLabelIssues}`],\n file: filePath,\n suggestedFix:\n 'Associate inputs with visible labels or use aria-label/aria-labelledby when a visible label is not appropriate.',\n }),\n );\n }\n }\n\n const hasMedia =\n codeLower.includes('@media') ||\n codeLower.includes('usemediaquery') ||\n codeLower.includes('breakpoint');\n const hasResponsive =\n codeLower.includes('sm:') ||\n codeLower.includes('md:') ||\n codeLower.includes('lg:') ||\n codeLower.includes('_sm_') ||\n codeLower.includes('_md_');\n scores.push({\n category: 'Responsive Design',\n focusArea: 'responsive-design',\n score: Math.min(5, (hasMedia ? 3 : 1) + (hasResponsive ? 2 : 0)),\n details: `Media queries: ${hasMedia ? 'yes' : 'no'}, Responsive signals: ${hasResponsive ? 'yes' : 'no'}`,\n suggestions: !hasMedia && !hasResponsive ? ['Add responsive breakpoint handling.'] : [],\n });\n if (focusAreas.includes('responsive-design') && !hasMedia && !hasResponsive) {\n findings.push(\n makeFinding({\n id: 'responsive-signals-missing',\n category: 'Responsive Design',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['page-pattern-contract']),\n message: 'No responsive breakpoint handling was detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Add responsive layout behavior that matches the compiled route contract.',\n }),\n );\n }\n\n const hasTransition =\n codeLower.includes('transition') ||\n codeLower.includes('animate') ||\n codeLower.includes('keyframe') ||\n codeLower.includes('framer');\n const hasHover =\n codeLower.includes(':hover') ||\n codeLower.includes('onmouseenter') ||\n codeLower.includes('hover:');\n const buttonInFormWithoutTypeCount = astSignals.buttonInFormWithoutTypeCount;\n const authFormWithoutSubmitCount = astSignals.authFormWithoutSubmitCount;\n const authInputWithoutNameCount = astSignals.authInputWithoutNameCount;\n const authProtectedRedirectSignalCount = astSignals.authProtectedRedirectSignalCount;\n const authAnonymousRedirectSignalCount = astSignals.authAnonymousRedirectSignalCount;\n const authExitSignalCount = astSignals.authExitSignalCount;\n const authSessionTeardownSignalCount = astSignals.authSessionTeardownSignalCount;\n const authStorageWriteCount = astSignals.authStorageWriteCount;\n const authStorageClearCount = astSignals.authStorageClearCount;\n const authCookieWriteCount = astSignals.authCookieWriteCount;\n const authCookieClearCount = astSignals.authCookieClearCount;\n const authHeaderWriteCount = astSignals.authHeaderWriteCount;\n const authHeaderClearCount = astSignals.authHeaderClearCount;\n const authCacheClientCount = astSignals.authCacheClientCount;\n const authCacheClearCount = astSignals.authCacheClearCount;\n const authRefreshSignalCount = astSignals.authRefreshSignalCount;\n const authRefreshClearCount = astSignals.authRefreshClearCount;\n const authRealtimeSignalCount = countAuthRealtimeSignals(code);\n const authRealtimeClearCount = countAuthRealtimeClearSignals(code);\n const authCoordinationSignalCount = countAuthCoordinationSignals(code);\n const authCoordinationClearCount = countAuthCoordinationClearSignals(code);\n const authErrorSignalCount = countAuthErrorSignals(code);\n const authSuccessSignalCount = countAuthSuccessSignals(code);\n const authCallbackTokenSignalCount = countAuthCallbackTokenSignals(code, filePath);\n const authCallbackExchangeSignalCount = countAuthCallbackExchangeSignals(code);\n const authCallbackExchangeErrorSignalCount = countAuthCallbackExchangeErrorSignals(code);\n const authCallbackErrorSignalCount = countAuthCallbackErrorSignals(code, filePath);\n const authCallbackStateSignalCount = countAuthCallbackStateSignals(code);\n const authCallbackStateValidationSignalCount = countAuthCallbackStateValidationSignals(code);\n const authCallbackStateStorageSignalCount = countAuthCallbackStateStorageSignals(code);\n const authCallbackStateStorageClearSignalCount = countAuthCallbackStateStorageClearSignals(code);\n const authUnauthenticatedBranchSignalCount = countAuthUnauthenticatedBranchSignals(code);\n const hasAuthCallbackErrorGap =\n authCallbackTokenSignalCount > 0 && authCallbackErrorSignalCount === 0;\n scores.push({\n category: 'Motion & Interaction',\n focusArea: 'motion-interaction',\n score: Math.max(\n 1,\n Math.min(\n 5,\n (hasTransition ? 3 : 1) +\n (hasHover ? 2 : 0) -\n (buttonInFormWithoutTypeCount > 0 ? 1 : 0) -\n (authFormWithoutSubmitCount > 0 ? 1 : 0) -\n (authInputWithoutNameCount > 0 ? 1 : 0) -\n (authExitSignalCount > 0 && authSessionTeardownSignalCount === 0 ? 1 : 0),\n ),\n ),\n details: `Transitions: ${hasTransition ? 'yes' : 'no'}, Hover states: ${hasHover ? 'yes' : 'no'}, form buttons missing type: ${buttonInFormWithoutTypeCount}, auth forms without submit control: ${authFormWithoutSubmitCount}, auth inputs without name: ${authInputWithoutNameCount}, auth redirects to protected routes: ${authProtectedRedirectSignalCount}, auth exits without anonymous redirect: ${authExitSignalCount > 0 && authAnonymousRedirectSignalCount === 0 ? 1 : 0}, auth exits without teardown: ${authExitSignalCount > 0 && authSessionTeardownSignalCount === 0 ? 1 : 0}`,\n suggestions: [\n ...(!hasTransition\n ? ['Add transitions for interactive state changes where appropriate.']\n : []),\n ...(buttonInFormWithoutTypeCount > 0\n ? [\n 'Add explicit button types inside forms so non-submit actions do not accidentally submit.',\n ]\n : []),\n ...(authFormWithoutSubmitCount > 0\n ? [\n 'Auth-like forms should expose a clear submit control so users can actually complete the credential flow.',\n ]\n : []),\n ...(authInputWithoutNameCount > 0\n ? [\n 'Give auth-related form inputs stable `name` attributes so browser form posts and FormData submissions include the credential values.',\n ]\n : []),\n ...(authProtectedRedirectSignalCount > 0\n ? [\n 'Keep unauthenticated guard redirects pointed at anonymous entry routes, not protected destinations like `/dashboard` or `/app`.',\n ]\n : []),\n ...(authExitSignalCount > 0 && authAnonymousRedirectSignalCount === 0\n ? [\n 'After sign-out, return users to an anonymous entry route instead of leaving the protected shell in place.',\n ]\n : []),\n ...(authExitSignalCount > 0 && authSessionTeardownSignalCount === 0\n ? [\n 'Do not treat redirect-only logout as a complete sign-out. Explicitly invalidate the reviewed session before returning users to an anonymous route.',\n ]\n : []),\n ],\n });\n if (buttonInFormWithoutTypeCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-button-type-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Buttons inside forms were detected without an explicit `type` attribute.',\n evidence: [filePath, `Buttons inside forms without type: ${buttonInFormWithoutTypeCount}`],\n file: filePath,\n suggestedFix:\n 'Set `type=\"button\"` for non-submit actions and `type=\"submit\"` for the intended submit control.',\n }),\n );\n }\n\n if (authFormWithoutSubmitCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-auth-submit-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Auth-like forms were detected without any submit control.',\n evidence: [filePath, `Auth forms without submit control: ${authFormWithoutSubmitCount}`],\n file: filePath,\n suggestedFix:\n 'Add an explicit submit button or submit input so users can complete the sign-in, registration, or recovery flow.',\n }),\n );\n }\n\n if (authInputWithoutNameCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-auth-input-name-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Auth-like form inputs were detected without a `name` attribute.',\n evidence: [filePath, `Auth inputs without name: ${authInputWithoutNameCount}`],\n file: filePath,\n suggestedFix:\n 'Add stable name attributes such as `email`, `username`, or `password` so browser form submission and FormData handling include the credential values.',\n }),\n );\n }\n\n if (\n authProtectedRedirectSignalCount > 0 &&\n (astSignals.authGuardSignalCount > 0 || astSignals.authSessionSignalCount > 0) &&\n astSignals.authEntrySignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-guard-protected-redirect',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Auth/session logic in the reviewed file redirects toward protected destinations instead of anonymous entry routes.',\n evidence: [filePath, `Protected auth redirects: ${authProtectedRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Redirect unauthenticated flows to `/`, `/login`, `/register`, or another gateway route, and reserve redirects to `/dashboard` or `/app` for reviewed post-auth success flows.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n (astSignals.authSessionSignalCount > 0 || astSignals.authGuardSignalCount > 0) &&\n authAnonymousRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-exit-redirect-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'Auth/session exit logic does not show an obvious redirect back to an anonymous entry route.',\n evidence: [\n filePath,\n `Auth exit signals: ${authExitSignalCount}`,\n `Anonymous auth redirects: ${authAnonymousRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After logout or session exit, navigate users to `/`, `/login`, `/register`, or another reviewed anonymous entry route so protected shells do not linger after sign-out.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n (astSignals.authSessionSignalCount > 0 || astSignals.authGuardSignalCount > 0) &&\n authSessionTeardownSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-exit-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'Auth/session exit logic redirects users away but does not show an obvious session teardown or sign-out boundary.',\n evidence: [\n filePath,\n `Auth exit signals: ${authExitSignalCount}`,\n `Session teardown signals: ${authSessionTeardownSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Before redirecting users to `/login` or another anonymous route, explicitly sign out or invalidate the reviewed session state.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authStorageWriteCount > 0 && authStorageClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-storage-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow writes auth data into browser storage but does not show that storage being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth storage writes: ${authStorageWriteCount}`,\n `Auth storage clears: ${authStorageClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow stores auth/session data in browser storage, remove those auth keys during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authCookieWriteCount > 0 && authCookieClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-cookie-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow issues auth-like cookies but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth cookie writes: ${authCookieWriteCount}`,\n `Auth cookie clears: ${authCookieClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow issues auth cookies from reviewed source code, explicitly expire or delete those cookies during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authHeaderWriteCount > 0 && authHeaderClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-header-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow constructs auth-like headers but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth header writes: ${authHeaderWriteCount}`,\n `Auth header clears: ${authHeaderClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow constructs auth/session headers in reviewed source code, explicitly delete or reset those header values during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authCacheClientCount > 0 &&\n authCacheClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-cache-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow uses client-side data caches but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth cache clients: ${authCacheClientCount}`,\n `Auth cache clears: ${authCacheClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If protected data is cached in query clients or client data stores, clear or reset those caches during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authRefreshSignalCount > 0 && authRefreshClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-refresh-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow starts background auth refresh work but does not show it being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth refresh signals: ${authRefreshSignalCount}`,\n `Auth refresh clears: ${authRefreshClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If auth/session refresh runs on timers or subscriptions, clear those intervals, timeouts, or listeners during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authRealtimeSignalCount > 0 &&\n authRealtimeClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-realtime-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow starts realtime channels or sockets but does not show them being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth realtime signals: ${authRealtimeSignalCount}`,\n `Auth realtime clears: ${authRealtimeClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If protected data arrives over websockets, SSE, or realtime channels, close or unsubscribe those connections during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authCoordinationSignalCount > 0 &&\n authCoordinationClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-coordination-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow coordinates auth state across tabs but does not show those channels or listeners being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth coordination signals: ${authCoordinationSignalCount}`,\n `Auth coordination clears: ${authCoordinationClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If auth state is coordinated across tabs with BroadcastChannel or storage listeners, close those channels and remove those listeners during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n const hasProtectedRouteInReview =\n reviewPack?.data.routes.some((route) => isProtectedLikeRoute(route.path)) ?? false;\n const hasRecoveryRouteInReview =\n reviewPack?.data.routes.some((route) => isRecoveryLikeRoute(route.path)) ?? false;\n const hasSignInRouteInReview =\n reviewPack?.data.routes.some((route) => isSignInLikeRoute(route.path)) ?? false;\n const hasRegistrationRouteInReview =\n reviewPack?.data.routes.some((route) => isRegistrationLikeRoute(route.path)) ?? false;\n const hasAnonymousEntryRouteInReview =\n reviewPack?.data.routes.some((route) => isAnonymousEntryLikeRoute(route.path)) ?? false;\n const signInFlowSignals = countSignInFlowSignals(code, filePath);\n const recoveryFlowSignals = countRecoveryFlowSignals(code, filePath);\n const signUpFlowSignals = countSignUpFlowSignals(code, filePath);\n const requiresProtectedSuccessTransition =\n signInFlowSignals > 0 ||\n (astSignals.authEntrySignalCount > 0 && signUpFlowSignals === 0 && recoveryFlowSignals === 0);\n const authRecoveryRouteSignalCount = countAuthRecoveryRouteSignals(code);\n const registrationRouteSignalCount = countRegistrationRouteSignals(code);\n const anonymousEntryRouteSignalCount = countAnonymousEntryRouteSignals(code);\n const signInRouteSignalCount = countSignInRouteSignals(code);\n if (\n requiresProtectedSuccessTransition &&\n hasProtectedRouteInReview &&\n authProtectedRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-success-redirect-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed auth entry flow does not show an obvious transition into the protected application surface.',\n evidence: [\n filePath,\n `Auth entry signals: ${astSignals.authEntrySignalCount}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After reviewed sign-in, registration, or recovery success, navigate users to a protected route like `/dashboard`, `/app`, or another primary destination declared in the compiled route contract.',\n }),\n );\n }\n\n if (signInFlowSignals > 0 && hasRecoveryRouteInReview && authRecoveryRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-recovery-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed sign-in flow does not show an obvious path into the declared account-recovery route.',\n evidence: [\n filePath,\n `Sign-in flow signals: ${signInFlowSignals}`,\n `Reviewed recovery routes: ${\n reviewPack?.data.routes\n .filter((route) => isRecoveryLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Recovery route signals: ${authRecoveryRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link sign-in users to the reviewed recovery route, such as `/forgot-password` or `/reset-password`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (signInFlowSignals > 0 && hasRegistrationRouteInReview && registrationRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-registration-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed sign-in flow does not show an obvious path into the declared registration route.',\n evidence: [\n filePath,\n `Sign-in flow signals: ${signInFlowSignals}`,\n `Reviewed registration routes: ${\n reviewPack?.data.routes\n .filter((route) => isRegistrationLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Registration route signals: ${registrationRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link sign-in users to the reviewed registration route, such as `/register` or `/sign-up`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (\n recoveryFlowSignals > 0 &&\n hasAnonymousEntryRouteInReview &&\n anonymousEntryRouteSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-entry-return-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed recovery flow does not show an obvious path back into the declared anonymous entry route.',\n evidence: [\n filePath,\n `Recovery flow signals: ${recoveryFlowSignals}`,\n `Reviewed anonymous entry routes: ${\n reviewPack?.data.routes\n .filter((route) => isAnonymousEntryLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Anonymous entry route signals: ${anonymousEntryRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link recovery users back to a reviewed anonymous entry route, such as `/login`, `/register`, or `/`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (signUpFlowSignals > 0 && hasSignInRouteInReview && signInRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-signin-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed registration flow does not show an obvious path back into the declared sign-in route.',\n evidence: [\n filePath,\n `Registration flow signals: ${signUpFlowSignals}`,\n `Reviewed sign-in routes: ${\n reviewPack?.data.routes\n .filter((route) => isSignInLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Sign-in route signals: ${signInRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link registration users back to the reviewed sign-in route, such as `/login` or `/sign-in`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (\n (((authCallbackTokenSignalCount > 0 || authCallbackStateSignalCount > 0) &&\n authCallbackErrorSignalCount > 0) ||\n (authCallbackExchangeSignalCount > 0 && authCallbackExchangeErrorSignalCount > 0)) &&\n hasSignInRouteInReview &&\n signInRouteSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-callback-entry-return-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed auth callback failure path does not show an obvious route back to the declared sign-in surface.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n `Auth callback exchange signals: ${authCallbackExchangeSignalCount}`,\n `Auth callback exchange error signals: ${authCallbackExchangeErrorSignalCount}`,\n `Reviewed sign-in routes: ${\n reviewPack?.data.routes\n .filter((route) => isSignInLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Sign-in route signals: ${signInRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback handling or callback session exchange fails, link or redirect users back to a reviewed sign-in route such as `/login` or `/sign-in` instead of leaving users on an isolated callback failure state.',\n }),\n );\n }\n\n if (astSignals.authSessionSignalCount > 0 && astSignals.authLoadingSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth/session flow does not show an obvious loading or pending state while session resolution happens.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render an explicit loading, pending, skeleton, or suspense fallback while auth or session state resolves so protected content does not flash or race.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authProtectedLoadingRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-protected-render',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface shows a loading branch, but that branch still appears to render a protected destination while session state is unresolved.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Protected loading renders: ${astSignals.authProtectedLoadingRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'While auth/session state is loading, render a neutral spinner, skeleton, suspense fallback, or guard boundary instead of returning a dashboard/app shell before the session is confirmed.',\n }),\n );\n }\n\n if (\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authBlankLoadingRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-blank-render',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth/session loading branch returns nothing instead of an explicit pending boundary.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Blank loading renders: ${astSignals.authBlankLoadingRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render a spinner, skeleton, suspense fallback, or another explicit pending UI while auth/session state resolves instead of returning `null` or an empty fragment.',\n }),\n );\n }\n\n if (\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authAnonymousLoadingRedirectCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-anonymous-redirect',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth/session loading branch redirects users to an anonymous route before session state is resolved.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Anonymous loading redirects: ${astSignals.authAnonymousLoadingRedirectCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'While auth/session state is still loading, render a pending boundary instead of redirecting to `/login`, `/`, or another anonymous route. Only redirect after the session resolves as unauthenticated.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount > 0 &&\n astSignals.authProtectedUnauthenticatedRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-protected-render',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface branches on auth loss but still appears to render a protected destination in the unauthenticated branch.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Protected unauthenticated renders: ${astSignals.authProtectedUnauthenticatedRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect to a reviewed anonymous route or render a neutral guard boundary instead of returning a dashboard/app shell.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-handling-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface reads auth/session state but does not show an explicit unauthenticated branch when session resolution fails or the user signs out.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Auth guard signals: ${astSignals.authGuardSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When protected surfaces read session state directly, branch on unauthenticated/null-session cases and redirect to a reviewed anonymous route or return a guard boundary before protected content renders.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount > 0 &&\n authAnonymousRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-redirect-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface branches on auth loss but does not show an obvious redirect back to an anonymous route.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Anonymous redirect signals: ${authAnonymousRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect users to `/`, `/login`, `/register`, or another reviewed anonymous route instead of returning `null` or leaving the protected shell blank.',\n }),\n );\n }\n\n if (hasAuthCallbackErrorGap) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-error-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth callback flow does not show an obvious failure state for provider-denied or callback error returns.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback routes can receive `error`, `error_description`, or related provider-return params, branch on those values and show a reviewed failure state before or alongside success redirects.',\n }),\n );\n }\n\n if (\n (astSignals.authSessionSignalCount > 0 || astSignals.authEntrySignalCount > 0) &&\n authErrorSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-error-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth flow does not show an obvious failure state for rejected sign-in, recovery, or session refresh paths.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth entry signals: ${astSignals.authEntrySignalCount}`,\n `Auth error signals: ${authErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Expose reviewed error handling with inline feedback, alert messaging, or another explicit failure affordance for sign-in, recovery, or session refresh failures.',\n }),\n );\n }\n\n if (recoveryFlowSignals > 0 && authSuccessSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-recovery-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed recovery flow does not show an obvious success or confirmation state after the reset request completes.',\n evidence: [\n filePath,\n `Recovery flow signals: ${recoveryFlowSignals}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After recovery or reset submission succeeds, show a reviewed confirmation state such as \"check your email\", \"reset link sent\", or another explicit success affordance.',\n }),\n );\n }\n\n if (\n signUpFlowSignals > 0 &&\n authProtectedRedirectSignalCount === 0 &&\n authSuccessSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-registration-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed registration flow does not show either a protected post-auth transition or an explicit success/verification state.',\n evidence: [\n filePath,\n `Registration flow signals: ${signUpFlowSignals}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After registration succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state such as \"account created\" or \"check your email\" before the next auth step.',\n }),\n );\n }\n\n if (\n (authCallbackTokenSignalCount > 0 || authCallbackStateSignalCount > 0) &&\n authProtectedRedirectSignalCount === 0 &&\n authSuccessSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth callback flow does not show either a protected post-auth transition or an explicit success/verification state.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback state reads: ${authCallbackStateSignalCount}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After callback validation or code exchange succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state before the next auth step.',\n }),\n );\n }\n\n if (authCallbackExchangeSignalCount > 0 && authCallbackExchangeErrorSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-exchange-error-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth callback exchange does not show explicit failure handling if session completion rejects.',\n evidence: [\n filePath,\n `Auth callback exchange signals: ${authCallbackExchangeSignalCount}`,\n `Auth callback exchange error signals: ${authCallbackExchangeErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Wrap reviewed callback code/session exchange in catch handling or explicit exchange-error state so failures do not leave users stuck on an indefinite callback surface.',\n }),\n );\n }\n\n const knownRoutes = reviewPack?.data.routes.length ?? packManifest?.pages.length ?? 0;\n const placeholderNavigationTargets = astSignals.placeholderNavigationTargetCount;\n scores.push({\n category: 'Topology Context',\n focusArea: 'route-topology',\n score: Math.max(\n 1,\n (reviewPack ? 5 : packManifest ? 4 : 1) - (placeholderNavigationTargets > 0 ? 2 : 0),\n ),\n details: reviewPack\n ? `Compiled review contract covers ${knownRoutes} routes. Placeholder navigation targets: ${placeholderNavigationTargets}.`\n : packManifest\n ? `Pack manifest is available for ${knownRoutes} pages, but the review pack is missing. Placeholder navigation targets: ${placeholderNavigationTargets}.`\n : `No compiled route context was available during critique. Placeholder navigation targets: ${placeholderNavigationTargets}.`,\n suggestions: [\n ...(reviewPack\n ? []\n : [\n 'Run `decantr registry compile-packs decantr.essence.json --write-context` so critique starts from a compiled review contract.',\n ]),\n ...(placeholderNavigationTargets > 0\n ? [\n 'Replace placeholder href/to targets with real route destinations from the compiled contract.',\n ]\n : []),\n ],\n });\n if (focusAreas.includes('route-topology') && !reviewPack) {\n findings.push(\n makeFinding({\n id: 'review-pack-missing-for-critique',\n category: 'Route Topology',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'route-topology',\n 'page-route-contract',\n ]),\n message: 'Critique ran without a compiled review pack.',\n evidence: ['review-pack unavailable'],\n file: filePath,\n suggestedFix:\n 'Regenerate execution packs so critique findings can anchor to the compiled route contract.',\n }),\n );\n }\n if (focusAreas.includes('route-topology') && placeholderNavigationTargets > 0) {\n findings.push(\n makeFinding({\n id: 'route-placeholder-navigation-target',\n category: 'Route Topology',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'route-topology',\n 'page-route-contract',\n 'review-remediation',\n ]),\n message: 'Placeholder navigation targets were detected in the reviewed file.',\n evidence: [filePath, `Placeholder href/to targets: ${placeholderNavigationTargets}`],\n file: filePath,\n suggestedFix:\n 'Replace placeholder route targets like `#` or `javascript:void(0)` with the actual page paths from the compiled review contract.',\n }),\n );\n }\n\n const hasInlineStyleLiterals =\n astSignals.inlineStyleAttributeCount > 0 || /style\\s*=\\s*[\"']/.test(code);\n if (antiPatternIds.has('inline-styles') && hasInlineStyleLiterals) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-inline-styles',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'theme-consistency',\n ]),\n message: 'Inline style literals were detected in the reviewed file.',\n evidence: [\n filePath,\n `Disallowed inline style attributes: ${astSignals.inlineStyleAttributeCount}`,\n ],\n file: filePath,\n suggestedFix: isContractOnly\n ? 'Replace static inline visual values with the project design system, accepted component variants, or local style rules. Keep inline style only for truly dynamic geometry.'\n : 'Replace static inline visual values with treatments, decorators, and CSS variables from the compiled contract. Keep inline style only for Decantr CSS-variable writes and truly dynamic geometry.',\n }),\n );\n }\n\n const componentStyleTagSignals = countComponentStyleTagSignals(code);\n if (componentStyleTagSignals > 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-component-style-tags',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'theme-consistency',\n ]),\n message:\n 'Component-scoped style tags or dynamic style elements were detected in the reviewed file.',\n evidence: [filePath, `Component style tag signals: ${componentStyleTagSignals}`],\n file: filePath,\n suggestedFix: isContractOnly\n ? 'Move shared keyframes, media queries, and visual rules into the project stylesheet, component library, or accepted local pattern/rule manifest.'\n : 'Move shared keyframes, media queries, and visual rules into global.css or treatments.css so the file stays aligned with the Decantr layer contract.',\n }),\n );\n }\n\n const hardcodedColors = antiPatternIds.has('hardcoded-colors') ? findHardcodedColors(code) : [];\n if (hardcodedColors.length > 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-hardcoded-colors',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'theme-consistency',\n 'mutation-theme-contract',\n ]),\n message: 'Hardcoded color literals were detected in the reviewed file.',\n evidence: [filePath, `Color literals: ${hardcodedColors.slice(0, 5).join(', ')}`],\n file: filePath,\n suggestedFix:\n 'Replace hardcoded colors with CSS variables or theme decorators from Decantr.',\n }),\n );\n }\n\n const utilitySignals = antiPatternIds.has('utility-framework-leakage')\n ? findUtilityFrameworkSignals(code)\n : [];\n if (utilitySignals.length > 0 && usedTreatments.length === 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-utility-framework-leakage',\n category: 'Anti-Patterns',\n severity: 'info',\n message:\n 'Utility-framework class patterns appear to be carrying the primary visual system for this file.',\n evidence: [filePath, `Utility signals: ${utilitySignals.slice(0, 6).join(', ')}`],\n file: filePath,\n suggestedFix:\n 'Use Decantr treatments and decorators as the primary styling contract, with utilities only as supporting glue when necessary.',\n }),\n );\n }\n\n const dangerousHtmlCount = astSignals.dangerousHtmlCount;\n const rawHtmlInjectionCount = Math.max(\n astSignals.rawHtmlInjectionCount,\n /\\binnerHTML\\s*=|\\binsertAdjacentHTML\\s*\\(|\\bdocument\\.write\\s*\\(/.test(code) ? 1 : 0,\n );\n const dynamicEvalCount = Math.max(\n astSignals.dynamicEvalCount,\n /\\beval\\s*\\(|new\\s+Function\\s*\\(/.test(code) ? 1 : 0,\n );\n const externalIframeWithoutSandboxCount = astSignals.externalIframeWithoutSandboxCount;\n const insecureFormActionCount = astSignals.insecureFormActionCount;\n const insecureAuthFormMethodCount = astSignals.insecureAuthFormMethodCount;\n const insecureTransportEndpointCount = astSignals.insecureTransportEndpointCount;\n const insecureExternalImageCount = astSignals.insecureExternalImageCount;\n const externalBlankLinkWithoutRelCount = astSignals.externalBlankLinkWithoutRelCount;\n const authOpenRedirectSignalCount = astSignals.authOpenRedirectSignalCount;\n const authExternalRedirectSignalCount = astSignals.authExternalRedirectSignalCount;\n const authProviderStateMissingCount = astSignals.authProviderStateMissingCount;\n const authProviderPkceMissingCount = astSignals.authProviderPkceMissingCount;\n const authProviderNonceMissingCount = astSignals.authProviderNonceMissingCount;\n const authCallbackUrlScrubSignalCount = countAuthCallbackUrlScrubSignals(code);\n const emailAutocompleteMissingCount = astSignals.emailAutocompleteMissingCount;\n const passwordAutocompleteMissingCount = astSignals.passwordAutocompleteMissingCount;\n const otpAutocompleteMissingCount = astSignals.otpAutocompleteMissingCount;\n const authAutocompleteDisabledCount = astSignals.authAutocompleteDisabledCount;\n const authAutocompleteSemanticMismatchCount = astSignals.authAutocompleteSemanticMismatchCount;\n const authInputTypeMismatchCount = astSignals.authInputTypeMismatchCount;\n const hardcodedSecretSignalCount = astSignals.hardcodedSecretSignalCount;\n const clientSecretEnvReferenceCount = astSignals.clientSecretEnvReferenceCount;\n const localhostEndpointCount = astSignals.localhostEndpointCount;\n const wildcardPostMessageCount = astSignals.wildcardPostMessageCount;\n const windowOpenWithoutNoopenerCount = astSignals.windowOpenWithoutNoopenerCount;\n const messageListenerWithoutOriginCheckCount = astSignals.messageListenerWithoutOriginCheckCount;\n const authCookieMissingHardeningCount = astSignals.authCookieMissingHardeningCount;\n const insecureExternalIframeCount = astSignals.insecureExternalIframeCount;\n const hasDangerousHtml = dangerousHtmlCount > 0;\n const hasRawHtmlInjection = rawHtmlInjectionCount > 0;\n const hasDynamicEval = dynamicEvalCount > 0;\n const hasExternalIframeWithoutSandbox = externalIframeWithoutSandboxCount > 0;\n const hasInsecureFormAction = insecureFormActionCount > 0;\n const hasInsecureAuthFormMethod = insecureAuthFormMethodCount > 0;\n const hasInsecureTransportEndpoint = insecureTransportEndpointCount > 0;\n const hasInsecureExternalImage = insecureExternalImageCount > 0;\n const hasExternalBlankLinkWithoutRel = externalBlankLinkWithoutRelCount > 0;\n const hasAuthOpenRedirectSignals = authOpenRedirectSignalCount > 0;\n const hasAuthExternalRedirectSignals = authExternalRedirectSignalCount > 0;\n const hasAuthProviderStateMissing = authProviderStateMissingCount > 0;\n const hasAuthProviderPkceMissing = authProviderPkceMissingCount > 0;\n const hasAuthProviderNonceMissing = authProviderNonceMissingCount > 0;\n const hasAuthCallbackStateValidationGap =\n authCallbackStateSignalCount > 0 && authCallbackStateValidationSignalCount === 0;\n const hasAuthCallbackStateTeardownGap =\n authCallbackStateValidationSignalCount > 0 &&\n authCallbackStateStorageSignalCount > 0 &&\n authCallbackStateStorageClearSignalCount === 0;\n const hasAuthCallbackUrlScrubGap =\n (authCallbackTokenSignalCount > 0 || authCallbackErrorSignalCount > 0) &&\n authCallbackUrlScrubSignalCount === 0;\n const hasAuthAutocompleteIssues =\n emailAutocompleteMissingCount > 0 ||\n passwordAutocompleteMissingCount > 0 ||\n otpAutocompleteMissingCount > 0 ||\n authAutocompleteDisabledCount > 0 ||\n authAutocompleteSemanticMismatchCount > 0 ||\n authInputTypeMismatchCount > 0;\n const hasHardcodedSecretSignals = hardcodedSecretSignalCount > 0;\n const hasClientSecretEnvReferences = clientSecretEnvReferenceCount > 0;\n const hasLocalhostEndpoints = localhostEndpointCount > 0;\n const hasWildcardPostMessage = wildcardPostMessageCount > 0;\n const hasWindowOpenWithoutNoopener = windowOpenWithoutNoopenerCount > 0;\n const hasMessageListenerWithoutOriginCheck = messageListenerWithoutOriginCheckCount > 0;\n const hasInsecureExternalIframe = insecureExternalIframeCount > 0;\n const hasAuthStorageWrites = authStorageWriteCount > 0;\n const hasAuthStorageClearGap =\n authExitSignalCount > 0 && authStorageWriteCount > 0 && authStorageClearCount === 0;\n const hasAuthCookieWrites = authCookieWriteCount > 0;\n const hasAuthCookieClearGap =\n authExitSignalCount > 0 && authCookieWriteCount > 0 && authCookieClearCount === 0;\n const hasAuthCookieMissingHardening = authCookieMissingHardeningCount > 0;\n const hasAuthHeaderWrites = authHeaderWriteCount > 0;\n const hasAuthHeaderClearGap =\n authExitSignalCount > 0 && authHeaderWriteCount > 0 && authHeaderClearCount === 0;\n const hasAuthCacheClients = authCacheClientCount > 0;\n const hasAuthCacheClearGap =\n authExitSignalCount > 0 && authCacheClientCount > 0 && authCacheClearCount === 0;\n scores.push({\n category: 'Security Hygiene',\n focusArea: 'security-hygiene',\n score: Math.max(\n 1,\n 5 -\n (hasDangerousHtml ? 2 : 0) -\n (hasRawHtmlInjection ? 2 : 0) -\n (hasDynamicEval ? 2 : 0) -\n (hasExternalIframeWithoutSandbox ? 1 : 0) -\n (hasInsecureFormAction ? 2 : 0) -\n (hasInsecureAuthFormMethod ? 2 : 0) -\n (hasInsecureTransportEndpoint ? 2 : 0) -\n (hasInsecureExternalImage ? 1 : 0) -\n (hasHardcodedSecretSignals ? 3 : 0) -\n (hasClientSecretEnvReferences ? 3 : 0) -\n (hasLocalhostEndpoints ? 2 : 0) -\n (hasWildcardPostMessage ? 2 : 0) -\n (hasMessageListenerWithoutOriginCheck ? 2 : 0) -\n (hasWindowOpenWithoutNoopener ? 1 : 0) -\n (hasInsecureExternalIframe ? 1 : 0) -\n (hasExternalBlankLinkWithoutRel ? 1 : 0) -\n (hasAuthOpenRedirectSignals ? 2 : 0) -\n (hasAuthExternalRedirectSignals ? 2 : 0) -\n (hasAuthProviderStateMissing ? 2 : 0) -\n (hasAuthProviderPkceMissing ? 2 : 0) -\n (hasAuthProviderNonceMissing ? 2 : 0) -\n (hasAuthCallbackStateValidationGap ? 2 : 0) -\n (hasAuthCallbackStateTeardownGap ? 1 : 0) -\n (hasAuthCallbackUrlScrubGap ? 2 : 0) -\n (hasAuthAutocompleteIssues ? 1 : 0) -\n (hasAuthStorageWrites ? 2 : 0) -\n (hasAuthCookieWrites ? 2 : 0) -\n (hasAuthCookieMissingHardening ? 2 : 0) -\n (hasAuthHeaderWrites ? 2 : 0) -\n (hasAuthCacheClearGap ? 1 : 0),\n ),\n details: `dangerouslySetInnerHTML: ${dangerousHtmlCount}, raw HTML injection: ${rawHtmlInjectionCount}, dynamic eval: ${dynamicEvalCount}, hardcoded secret literals: ${hardcodedSecretSignalCount}, client-exposed secret env references: ${clientSecretEnvReferenceCount}, localhost endpoints: ${localhostEndpointCount}, wildcard postMessage calls: ${wildcardPostMessageCount}, message listeners missing origin checks: ${messageListenerWithoutOriginCheckCount}, window.open calls missing noopener/noreferrer: ${windowOpenWithoutNoopenerCount}, external iframes without sandbox: ${externalIframeWithoutSandboxCount}, insecure external iframes: ${insecureExternalIframeCount}, insecure form actions: ${insecureFormActionCount}, auth forms with insecure method: ${insecureAuthFormMethodCount}, insecure transport endpoints: ${insecureTransportEndpointCount}, insecure remote images: ${insecureExternalImageCount}, external _blank links without rel: ${externalBlankLinkWithoutRelCount}, auth/query redirect signals: ${authOpenRedirectSignalCount}, auth external redirects: ${authExternalRedirectSignalCount}, auth provider URLs missing state: ${authProviderStateMissingCount}, auth provider code flows missing PKCE: ${authProviderPkceMissingCount}, auth provider id_token flows missing nonce: ${authProviderNonceMissingCount}, auth callback state reads: ${authCallbackStateSignalCount}, auth callback state validation signals: ${authCallbackStateValidationSignalCount}, auth callback state storage reads: ${authCallbackStateStorageSignalCount}, auth callback state storage clears: ${authCallbackStateStorageClearSignalCount}, auth callback token reads: ${authCallbackTokenSignalCount}, auth callback URL scrub signals: ${authCallbackUrlScrubSignalCount}, email inputs without autocomplete: ${emailAutocompleteMissingCount}, password inputs without autocomplete: ${passwordAutocompleteMissingCount}, OTP inputs without one-time-code autocomplete: ${otpAutocompleteMissingCount}, auth inputs with autocomplete off: ${authAutocompleteDisabledCount}, auth inputs with autocomplete semantic mismatch: ${authAutocompleteSemanticMismatchCount}, auth inputs with semantic type mismatch: ${authInputTypeMismatchCount}, auth storage writes: ${authStorageWriteCount}, auth storage clears: ${authStorageClearCount}, auth cookie writes: ${authCookieWriteCount}, auth cookie clears: ${authCookieClearCount}, auth cookies missing hardening: ${authCookieMissingHardeningCount}, auth header writes: ${authHeaderWriteCount}, auth header clears: ${authHeaderClearCount}, auth cache clients: ${authCacheClientCount}, auth cache clears: ${authCacheClearCount}`,\n suggestions: [\n ...(hasDangerousHtml || hasRawHtmlInjection\n ? ['Prefer escaped rendering paths and sanitize any unavoidable HTML before rendering it.']\n : []),\n ...(hasDynamicEval\n ? [\n 'Remove eval/new Function usage and replace it with explicit logic or data-driven dispatch.',\n ]\n : []),\n ...(hasHardcodedSecretSignals\n ? [\n 'Remove hardcoded secret literals from source immediately and rotate any exposed credentials.',\n ]\n : []),\n ...(hasClientSecretEnvReferences\n ? [\n 'Do not reference service-role, secret, or private-key env vars from client-exposed code paths.',\n ]\n : []),\n ...(hasLocalhostEndpoints\n ? [\n 'Replace localhost-style client endpoints with reviewed environment-backed URLs or move those calls behind a trusted server boundary before shipping.',\n ]\n : []),\n ...(hasWildcardPostMessage\n ? [\n 'Avoid `postMessage(..., \"*\")`; target a reviewed explicit origin instead of broadcasting to any window origin.',\n ]\n : []),\n ...(hasMessageListenerWithoutOriginCheck\n ? [\n 'Validate `event.origin` inside `message` event handlers before trusting or acting on cross-window data.',\n ]\n : []),\n ...(hasWindowOpenWithoutNoopener\n ? [\n 'When opening a new tab imperatively, include `noopener,noreferrer` features so the new page cannot retain opener access.',\n ]\n : []),\n ...(hasExternalIframeWithoutSandbox\n ? [\n 'Sandbox external iframes unless a reviewed embed contract explicitly requires broader privileges.',\n ]\n : []),\n ...(hasInsecureExternalIframe\n ? [\n 'Avoid embedding remote iframes over plain HTTP; use HTTPS or move the integration behind a reviewed trusted boundary.',\n ]\n : []),\n ...(hasInsecureFormAction\n ? [\n 'Avoid posting forms to plain HTTP endpoints; use HTTPS or move the action behind a trusted server boundary.',\n ]\n : []),\n ...(hasInsecureAuthFormMethod\n ? [\n 'Auth forms should submit with `method=\"post\"` or an explicit server action boundary instead of defaulting to GET semantics.',\n ]\n : []),\n ...(hasInsecureTransportEndpoint\n ? [\n 'Avoid plain HTTP or ws:// client endpoints; use HTTPS/WSS transport or route the request behind a trusted server boundary.',\n ]\n : []),\n ...(hasInsecureExternalImage\n ? [\n 'Avoid loading remote images over plain HTTP; use HTTPS or move the image behind a reviewed trusted asset boundary.',\n ]\n : []),\n ...(hasExternalBlankLinkWithoutRel\n ? ['Add rel=\"noopener noreferrer\" to external links that open in a new tab.']\n : []),\n ...(hasAuthOpenRedirectSignals\n ? [\n 'Resolve auth or route-transition redirects through a reviewed allowlist of internal routes instead of trusting raw `next`, `returnTo`, `callbackUrl`, or similar query params.',\n ]\n : []),\n ...(hasAuthExternalRedirectSignals\n ? [\n 'Avoid hard-redirecting auth flows to external URLs from app code. Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration.',\n ]\n : []),\n ...(hasAuthProviderStateMissing\n ? [\n 'When auth flows hand off to a provider authorize URL, include a reviewed `state` value and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n ]\n : []),\n ...(hasAuthProviderPkceMissing\n ? [\n 'When client-managed auth flows hand off to a provider code-flow authorize URL, include a reviewed PKCE `code_challenge` and verifier instead of hardcoding a bare authorization-code redirect from client code.',\n ]\n : []),\n ...(hasAuthProviderNonceMissing\n ? [\n 'When auth flows hand off to a provider authorize URL that requests `id_token`, include a reviewed `nonce` and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n ]\n : []),\n ...(hasAuthCallbackStateValidationGap\n ? [\n 'When callback routes read a returned provider `state`, validate it against a stored or expected reviewed value before exchanging callback codes or continuing auth setup.',\n ]\n : []),\n ...(hasAuthCallbackStateTeardownGap\n ? [\n 'After validating callback `state`, clear the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger beyond the auth exchange.',\n ]\n : []),\n ...(hasAuthCallbackUrlScrubGap\n ? [\n 'After consuming auth callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n ]\n : []),\n ...(hasAuthAutocompleteIssues\n ? [\n 'Add explicit autocomplete hints such as `email`, `username`, `current-password`, `new-password`, or `one-time-code` on auth-related inputs, keep those hints semantically aligned with the field purpose, avoid disabling autocomplete for credential fields, and keep credential field types semantically correct (`email`/`password`).',\n ]\n : []),\n ...(hasAuthStorageWrites\n ? [\n 'Avoid persisting auth tokens in browser storage; prefer secure, server-managed session boundaries or hardened cookie-based flows.',\n ]\n : []),\n ...(hasAuthStorageClearGap\n ? [\n 'If auth data is stored in browser storage, explicitly remove those auth/session keys during sign-out instead of relying on redirects or generic sign-out helpers alone.',\n ]\n : []),\n ...(hasAuthCookieWrites\n ? [\n 'Avoid setting auth cookies from client-side JavaScript; prefer server-issued HttpOnly cookies or other server-managed session boundaries.',\n ]\n : []),\n ...(hasAuthCookieClearGap\n ? [\n 'If reviewed source surfaces issue auth cookies, explicitly expire or delete them during sign-out instead of assuming redirects or generic sign-out helpers will clear them.',\n ]\n : []),\n ...(hasAuthCookieMissingHardening\n ? [\n 'When issuing auth cookies, set explicit `httpOnly`, `secure`, and `sameSite` options instead of relying on framework defaults or partial options.',\n ]\n : []),\n ...(hasAuthHeaderWrites\n ? [\n 'Avoid constructing bearer/session authorization headers in client-rendered code unless the auth model is explicitly reviewed and intended.',\n ]\n : []),\n ...(hasAuthHeaderClearGap\n ? [\n 'If reviewed source code constructs auth-like authorization headers, explicitly delete or reset those header values during sign-out instead of assuming redirects or generic sign-out helpers will clear them.',\n ]\n : []),\n ...(hasAuthCacheClients && hasAuthCacheClearGap\n ? [\n 'If protected data is cached in query clients or client stores, clear or reset those caches during sign-out so privileged data does not linger after logout.',\n ]\n : []),\n ],\n });\n\n if (hasDangerousHtml) {\n findings.push(\n makeFinding({\n id: 'security-dangerously-set-html',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'The reviewed file uses `dangerouslySetInnerHTML`.',\n evidence: [filePath, `Occurrences: ${dangerousHtmlCount}`],\n file: filePath,\n suggestedFix:\n 'Render structured data through components instead of injecting raw HTML, or sanitize the content before it reaches the view layer.',\n }),\n );\n }\n\n if (hasRawHtmlInjection) {\n findings.push(\n makeFinding({\n id: 'security-raw-html-injection',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'The reviewed file writes raw HTML into the DOM.',\n evidence: [filePath, `Occurrences: ${rawHtmlInjectionCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid `innerHTML` and `insertAdjacentHTML`; render trusted structured nodes instead.',\n }),\n );\n }\n\n if (hasDynamicEval) {\n findings.push(\n makeFinding({\n id: 'security-dynamic-code-eval',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'The reviewed file uses dynamic code execution patterns such as `eval`, `new Function`, or string-based timers.',\n evidence: [filePath, `Occurrences: ${dynamicEvalCount}`],\n file: filePath,\n suggestedFix:\n 'Replace dynamic code execution with explicit functions, lookup tables, or validated configuration data; avoid passing strings into timers.',\n }),\n );\n }\n\n if (hasHardcodedSecretSignals) {\n findings.push(\n makeFinding({\n id: 'security-hardcoded-secret-literal',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Hardcoded secret-like literals were detected in the reviewed file.',\n evidence: [filePath, `Hardcoded secret-like literals: ${hardcodedSecretSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Remove hardcoded secrets from source immediately, rotate any exposed credentials, and load sensitive values only through reviewed server-side boundaries.',\n }),\n );\n }\n\n if (hasClientSecretEnvReferences) {\n findings.push(\n makeFinding({\n id: 'security-client-secret-env-reference',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Client-exposed code references env vars that look server-only or secret-bearing.',\n evidence: [\n filePath,\n `Client-exposed secret env references: ${clientSecretEnvReferenceCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Remove secret-bearing env references from client code and move privileged access behind a reviewed server boundary or server-only module.',\n }),\n );\n }\n\n if (hasLocalhostEndpoints) {\n findings.push(\n makeFinding({\n id: 'security-localhost-endpoint-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file still references localhost-style endpoints.',\n evidence: [filePath, `Localhost endpoint signals: ${localhostEndpointCount}`],\n file: filePath,\n suggestedFix:\n 'Replace localhost, 127.0.0.1, or 0.0.0.0 endpoints with reviewed environment-backed URLs or move the client call behind a trusted server boundary.',\n }),\n );\n }\n\n if (hasInsecureExternalImage) {\n findings.push(\n makeFinding({\n id: 'security-image-transport-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file loads one or more remote images over plain HTTP.',\n evidence: [filePath, `Insecure remote images: ${insecureExternalImageCount}`],\n file: filePath,\n suggestedFix:\n 'Serve remote images over HTTPS or move them behind a reviewed trusted asset boundary before shipping.',\n }),\n );\n }\n\n if (hasWildcardPostMessage) {\n findings.push(\n makeFinding({\n id: 'security-postmessage-wildcard-origin',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Cross-window messaging uses `postMessage` with a wildcard target origin.',\n evidence: [filePath, `Wildcard postMessage calls: ${wildcardPostMessageCount}`],\n file: filePath,\n suggestedFix:\n 'Replace `postMessage(..., \"*\")` with an explicit reviewed origin so messages only cross the intended trust boundary.',\n }),\n );\n }\n\n if (hasMessageListenerWithoutOriginCheck) {\n findings.push(\n makeFinding({\n id: 'security-message-listener-origin-check-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Cross-window message handlers do not appear to validate `event.origin` before trusting inbound messages.',\n evidence: [\n filePath,\n `Message listeners missing origin checks: ${messageListenerWithoutOriginCheckCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Check `event.origin` against an explicit reviewed allowlist or expected origin before acting on `message` event payloads.',\n }),\n );\n }\n\n if (hasWindowOpenWithoutNoopener) {\n findings.push(\n makeFinding({\n id: 'security-window-open-noopener-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Imperative `window.open` usage targets a new tab without `noopener,noreferrer` protections.',\n evidence: [\n filePath,\n `window.open calls missing noopener/noreferrer: ${windowOpenWithoutNoopenerCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Use `window.open(url, \"_blank\", \"noopener,noreferrer\")` or equivalent reviewed features so the opened page cannot retain opener access.',\n }),\n );\n }\n\n if (hasExternalBlankLinkWithoutRel) {\n findings.push(\n makeFinding({\n id: 'security-target-blank-rel-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External links open in a new tab without `rel=\"noopener noreferrer\"`.',\n evidence: [filePath, `Occurrences: ${externalBlankLinkWithoutRelCount}`],\n file: filePath,\n suggestedFix:\n 'Add rel=\"noopener noreferrer\" to external target=\"_blank\" links to prevent tab-nabbing and preserve opener isolation.',\n }),\n );\n }\n\n if (hasExternalIframeWithoutSandbox) {\n findings.push(\n makeFinding({\n id: 'security-iframe-sandbox-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External iframe embeds were detected without a `sandbox` attribute.',\n evidence: [\n filePath,\n `External iframes without sandbox: ${externalIframeWithoutSandboxCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add the narrowest practical sandbox policy to external iframes, and only loosen capabilities when the embed contract explicitly requires it.',\n }),\n );\n }\n\n if (hasInsecureExternalIframe) {\n findings.push(\n makeFinding({\n id: 'security-iframe-transport-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file embeds one or more remote iframes over plain HTTP.',\n evidence: [filePath, `Insecure external iframes: ${insecureExternalIframeCount}`],\n file: filePath,\n suggestedFix:\n 'Serve embedded iframes over HTTPS or move the integration behind a reviewed trusted boundary before shipping.',\n }),\n );\n }\n\n if (hasInsecureFormAction) {\n findings.push(\n makeFinding({\n id: 'security-form-action-insecure',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Forms were detected using insecure or unsafe action targets.',\n evidence: [\n filePath,\n `Forms with insecure or unsafe action target: ${insecureFormActionCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Use HTTPS form endpoints or route submissions through a trusted server action/API boundary; do not use javascript:, mailto:, data:, or plain HTTP form actions for production flows.',\n }),\n );\n }\n\n if (hasInsecureAuthFormMethod) {\n findings.push(\n makeFinding({\n id: 'security-auth-form-method-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Auth-like forms were detected without an explicit POST-style submission method.',\n evidence: [filePath, `Auth forms with insecure method: ${insecureAuthFormMethodCount}`],\n file: filePath,\n suggestedFix:\n 'Add `method=\"post\"` or move the submission behind an explicit server action boundary so credential flows do not default to GET semantics.',\n }),\n );\n }\n\n if (hasInsecureTransportEndpoint) {\n findings.push(\n makeFinding({\n id: 'security-transport-endpoint-insecure',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'Client code was detected calling or navigating to plain HTTP or insecure websocket endpoints.',\n evidence: [filePath, `Insecure transport endpoints: ${insecureTransportEndpointCount}`],\n file: filePath,\n suggestedFix:\n 'Use HTTPS/WSS endpoints and reviewed secure redirects, or move the transport boundary behind a trusted server action or API layer.',\n }),\n );\n }\n\n if (hasAuthOpenRedirectSignals) {\n findings.push(\n makeFinding({\n id: 'security-auth-open-redirect-risk',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Redirect logic appears to trust next/returnTo-style query parameters without an obvious reviewed allowlist.',\n evidence: [filePath, `Auth/query redirect signals: ${authOpenRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Resolve post-auth and route-transition redirects through a reviewed internal allowlist instead of redirecting directly from raw `next`, `returnTo`, `callbackUrl`, or similar query parameters.',\n }),\n );\n }\n\n if (\n hasAuthExternalRedirectSignals &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-external-redirect-risk',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed auth flow redirects users directly to an external URL.',\n evidence: [filePath, `Auth external redirects: ${authExternalRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration instead of hardcoding off-site destinations in app code.',\n }),\n );\n }\n\n if (\n hasAuthProviderStateMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-state-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style authorize URL without a `state` parameter.',\n evidence: [filePath, `Auth provider URLs missing state: ${authProviderStateMissingCount}`],\n file: filePath,\n suggestedFix:\n 'Add a reviewed `state` value to external provider authorize URLs and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n }),\n );\n }\n\n if (\n hasAuthProviderPkceMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-pkce-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style OAuth code-flow URL without a `code_challenge`.',\n evidence: [\n filePath,\n `Auth provider code flows missing PKCE: ${authProviderPkceMissingCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add a reviewed PKCE `code_challenge` and verifier to external provider code flows instead of hardcoding a bare authorization-code redirect from client code.',\n }),\n );\n }\n\n if (\n hasAuthProviderNonceMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-nonce-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style OIDC id_token URL without a `nonce` parameter.',\n evidence: [\n filePath,\n `Auth provider id_token flows missing nonce: ${authProviderNonceMissingCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add a reviewed `nonce` value to external provider authorize URLs that request `id_token`, and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n }),\n );\n }\n\n if (hasAuthCallbackStateValidationGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-state-validation-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth callback flow reads a returned provider `state` value but does not show an obvious validation step against a reviewed expected value.',\n evidence: [\n filePath,\n `Auth callback state reads: ${authCallbackStateSignalCount}`,\n `Auth callback state validation signals: ${authCallbackStateValidationSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback routes read `state`, compare it against a stored or expected reviewed value before exchanging callback codes or continuing auth/session setup.',\n }),\n );\n }\n\n if (hasAuthCallbackStateTeardownGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-state-teardown-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'The reviewed auth callback flow validates stored callback `state` but does not show that the stored state key is cleared afterwards.',\n evidence: [\n filePath,\n `Auth callback state storage reads: ${authCallbackStateStorageSignalCount}`,\n `Auth callback state storage clears: ${authCallbackStateStorageClearSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After validating callback `state`, remove the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger.',\n }),\n );\n }\n\n if (hasAuthCallbackUrlScrubGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-url-scrub-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth callback flow appears to read codes, tokens, or provider error params from the URL without scrubbing them back out of browser history.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n `Auth callback URL scrub signals: ${authCallbackUrlScrubSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After consuming callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n }),\n );\n }\n\n if (hasAuthAutocompleteIssues) {\n findings.push(\n makeFinding({\n id: 'security-auth-autocomplete-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Auth-related inputs were detected with missing or incorrect `autocomplete` hints.',\n evidence: [\n filePath,\n `Email inputs without autocomplete: ${emailAutocompleteMissingCount}`,\n `Password inputs without autocomplete: ${passwordAutocompleteMissingCount}`,\n `OTP inputs without one-time-code autocomplete: ${otpAutocompleteMissingCount}`,\n `Auth inputs with autocomplete off: ${authAutocompleteDisabledCount}`,\n `Auth inputs with autocomplete semantic mismatch: ${authAutocompleteSemanticMismatchCount}`,\n `Auth inputs with semantic type mismatch: ${authInputTypeMismatchCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add `autocomplete=\"email\"` or `autocomplete=\"username\"` to identity fields, `autocomplete=\"current-password\"` or `autocomplete=\"new-password\"` to password fields, `autocomplete=\"one-time-code\"` to OTP and verification-code inputs, keep those autocomplete values aligned with the field purpose, do not disable autocomplete on credential inputs, and keep credential field types semantically correct.',\n }),\n );\n }\n\n if (hasAuthStorageWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-storage-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Potential auth credentials were written into browser storage.',\n evidence: [filePath, `Auth-like local/session storage writes: ${authStorageWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid writing tokens or sessions to localStorage/sessionStorage; prefer secure server-managed sessions or hardened cookie flows.',\n }),\n );\n }\n\n if (hasAuthCookieWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-cookie-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Potential auth credentials were written into client-managed cookies.',\n evidence: [filePath, `Auth-like cookie writes: ${authCookieWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid setting auth cookies from client-side code; prefer server-issued HttpOnly cookies or other server-managed session mechanisms.',\n }),\n );\n }\n\n if (hasAuthCookieMissingHardening) {\n findings.push(\n makeFinding({\n id: 'security-auth-cookie-hardening-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Auth cookies are being issued without explicit `httpOnly`, `secure`, and `sameSite` hardening.',\n evidence: [filePath, `Auth cookies missing hardening: ${authCookieMissingHardeningCount}`],\n file: filePath,\n suggestedFix:\n 'Set auth cookies with explicit `httpOnly: true`, `secure: true`, and a reviewed `sameSite` value so session boundaries do not rely on ambient defaults.',\n }),\n );\n }\n\n if (hasAuthHeaderWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-header-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Auth-like authorization headers were constructed in client-side code.',\n evidence: [filePath, `Auth-like header writes: ${authHeaderWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Prefer server-managed sessions or a deliberately reviewed client-auth strategy instead of assembling bearer/session headers ad hoc in client-rendered code.',\n }),\n );\n }\n\n const overall =\n Math.round((scores.reduce((sum, score) => sum + score.score, 0) / scores.length) * 10) / 10;\n return {\n $schema: VERIFICATION_SCHEMA_URLS.fileCritique,\n file: filePath,\n overall,\n scores,\n findings,\n focusAreas,\n reviewPack,\n };\n}\n\nfunction resolveProjectFilePath(projectRoot: string, filePath: string): string {\n const root = existsSync(projectRoot) ? realpathSync.native(projectRoot) : resolve(projectRoot);\n const candidatePath = isAbsolute(filePath) ? resolve(filePath) : resolve(root, filePath);\n const resolvedPath = existsSync(candidatePath)\n ? realpathSync.native(candidatePath)\n : candidatePath;\n const relativePath = relative(root, resolvedPath);\n\n if (relativePath.startsWith('..') || isAbsolute(relativePath)) {\n throw new Error(`Path escapes the project root: ${filePath}`);\n }\n\n return resolvedPath;\n}\n\nexport async function critiqueFile(\n filePath: string,\n projectRoot: string,\n): Promise<FileCritiqueReport> {\n const resolvedPath = resolveProjectFilePath(projectRoot, filePath);\n const code = await readFile(resolvedPath, 'utf-8');\n const treatmentsCss = readTextIfExists(join(projectRoot, 'src', 'styles', 'treatments.css'));\n const reviewPack = loadReviewPack(projectRoot);\n const packManifest = loadPackManifest(projectRoot);\n const adoptionMode = readProjectAdoptionMode(projectRoot);\n\n return critiqueSource({\n filePath: resolvedPath,\n code,\n reviewPack,\n packManifest,\n treatmentsCss,\n adoptionMode,\n });\n}\n","import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { extname, join, normalize } from 'node:path';\n\nconst CONTENT_TYPES = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.webp': 'image/webp',\n} as const;\n\nexport interface RuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface BuiltDistAuditOptions {\n distDir?: string;\n routeHints?: string[];\n}\n\nexport function emptyRuntimeAudit(failures: string[] = []): RuntimeAudit {\n return {\n distPresent: false,\n indexPresent: false,\n checked: false,\n passed: null,\n rootDocumentOk: false,\n titleOk: false,\n langOk: false,\n viewportOk: false,\n charsetOk: false,\n cspSignalOk: false,\n inlineScriptCount: 0,\n inlineEventHandlerCount: 0,\n externalScriptsWithoutIntegrityCount: 0,\n externalScriptsWithIntegrityMissingCrossoriginCount: 0,\n externalStylesheetsWithoutIntegrityCount: 0,\n externalStylesheetsWithIntegrityMissingCrossoriginCount: 0,\n externalScriptsWithInsecureTransportCount: 0,\n externalStylesheetsWithInsecureTransportCount: 0,\n externalMediaSourcesWithInsecureTransportCount: 0,\n externalBlankLinksWithoutRelCount: 0,\n externalIframesWithoutSandboxCount: 0,\n externalIframesWithInsecureTransportCount: 0,\n jsEvalSignalCount: 0,\n jsHtmlInjectionSignalCount: 0,\n jsInsecureTransportSignalCount: 0,\n jsSecretSignalCount: 0,\n assetCount: 0,\n assetsPassed: 0,\n routeHintsChecked: [],\n routeHintsMatched: 0,\n routeHintsCoverageOk: false,\n routeDocumentsChecked: 0,\n routeDocumentsPassed: 0,\n routeDocumentsHardenedCount: 0,\n routeDocumentsCoverageOk: false,\n routeDocumentsHardeningOk: false,\n fullRouteCoverageOk: false,\n totalAssetBytes: 0,\n jsAssetBytes: 0,\n cssAssetBytes: 0,\n largestAssetPath: null,\n largestAssetBytes: 0,\n failures,\n };\n}\n\nfunction getContentType(pathname: string): string {\n return (\n CONTENT_TYPES[extname(pathname) as keyof typeof CONTENT_TYPES] ?? 'application/octet-stream'\n );\n}\n\nfunction extractAssetPaths(indexHtml: string): string[] {\n const assetPaths = new Set<string>();\n\n for (const match of indexHtml.matchAll(/<(?:script|link)[^>]+(?:src|href)=\"([^\"]+)\"/g)) {\n const assetPath = match[1];\n const assetsIndex = assetPath.indexOf('/assets/');\n if (assetsIndex === -1) continue;\n assetPaths.add(assetPath.slice(assetsIndex));\n }\n\n return [...assetPaths];\n}\n\nfunction countInlineScriptTags(html: string): number {\n return html.match(/<script\\b(?:(?!\\bsrc=)[^>])*>/gi)?.length ?? 0;\n}\n\nfunction countInlineEventHandlerAttributes(html: string): number {\n return html.match(/\\son[a-z][a-z0-9_-]*\\s*=/gi)?.length ?? 0;\n}\n\nfunction countExternalScriptsWithoutIntegrity(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.src) && !entry.hasIntegrity).length;\n}\n\nfunction countExternalScriptsWithIntegrityMissingCrossorigin(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n hasCrossorigin: /\\bcrossorigin\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) => /^https?:\\/\\//i.test(entry.src) && entry.hasIntegrity && !entry.hasCrossorigin,\n ).length;\n}\n\nfunction countExternalScriptsWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => match[3])\n .filter((src) => /^http:\\/\\//i.test(src)).length;\n}\n\nfunction countExternalStylesheetsWithoutIntegrity(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) =>\n /^https?:\\/\\//i.test(entry.href) &&\n /\\bstylesheet\\b/i.test(entry.relValue) &&\n !entry.hasIntegrity,\n ).length;\n}\n\nfunction countExternalStylesheetsWithIntegrityMissingCrossorigin(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n hasCrossorigin: /\\bcrossorigin\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) =>\n /^https?:\\/\\//i.test(entry.href) &&\n /\\bstylesheet\\b/i.test(entry.relValue) &&\n entry.hasIntegrity &&\n !entry.hasCrossorigin,\n ).length;\n}\n\nfunction countExternalStylesheetsWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n };\n })\n .filter((entry) => /^http:\\/\\//i.test(entry.href) && /\\bstylesheet\\b/i.test(entry.relValue))\n .length;\n}\n\nfunction extractHtmlAttributeValues(attrs: string, attributeNames: string[]): string[] {\n const values: string[] = [];\n for (const attributeName of attributeNames) {\n const pattern = new RegExp(`\\\\b${attributeName}\\\\s*=\\\\s*([\"'])([^\"']+)\\\\1`, 'gi');\n for (const match of attrs.matchAll(pattern)) {\n values.push(match[2]);\n }\n }\n return values;\n}\n\nfunction valueContainsInsecureRemoteAsset(value: string | null | undefined): boolean {\n if (!value) return false;\n return value\n .split(',')\n .map((candidate) => candidate.trim().split(/\\s+/)[0] ?? '')\n .some((candidate) => /^http:\\/\\//i.test(candidate));\n}\n\nfunction countExternalMediaSourcesWithInsecureTransport(html: string): number {\n let count = 0;\n\n for (const match of html.matchAll(/<(img|source|video|audio)\\b([^>]*)>/gi)) {\n const tagName = match[1]?.toLowerCase();\n const attrs = match[2] ?? '';\n const attributeNames =\n tagName === 'video' ? ['src', 'poster'] : tagName === 'audio' ? ['src'] : ['src', 'srcset'];\n const hasInsecureTransport = extractHtmlAttributeValues(attrs, attributeNames).some((value) =>\n valueContainsInsecureRemoteAsset(value),\n );\n if (hasInsecureTransport) {\n count += 1;\n }\n }\n\n return count;\n}\n\nfunction countExternalBlankLinksWithoutRel(html: string): number {\n return [...html.matchAll(/<a\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const targetMatch = attrs.match(/\\btarget=([\"'])([^\"']+)\\1/i);\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n return {\n href: match[3],\n target: targetMatch?.[2]?.toLowerCase() ?? '',\n rel: relMatch?.[2] ?? '',\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.href) && entry.target === '_blank')\n .filter((entry) => !/\\bnoopener\\b/i.test(entry.rel) || !/\\bnoreferrer\\b/i.test(entry.rel))\n .length;\n}\n\nfunction countExternalIframesWithoutSandbox(html: string): number {\n return [...html.matchAll(/<iframe\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasSandbox: /\\bsandbox(?:\\s*=|\\b)/i.test(attrs),\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.src) && !entry.hasSandbox).length;\n}\n\nfunction countExternalIframesWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<iframe\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => match[3])\n .filter((src) => /^http:\\/\\//i.test(src)).length;\n}\n\nfunction countDynamicCodeSignals(js: string): number {\n return js.match(/\\beval\\s*\\(|\\bnew Function\\s*\\(/g)?.length ?? 0;\n}\n\nfunction countHtmlInjectionSignals(js: string): number {\n return (\n js.match(\n /\\bdangerouslySetInnerHTML\\b|\\b(?:innerHTML|outerHTML)\\s*=|\\binsertAdjacentHTML\\s*\\(|\\bdocument\\.write\\s*\\(/g,\n )?.length ?? 0\n );\n}\n\nfunction countInsecureTransportSignals(js: string): number {\n return (\n js.match(\n /\\b(?:http|ws):\\/\\/[^\\s'\"`]+|\\b(?:localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)(?::\\d+)?(?:\\/[^\\s'\"`]*)?/g,\n )?.length ?? 0\n );\n}\n\nfunction countSecretLeakSignals(js: string): number {\n const patterns = [\n /\\b(?:SUPABASE_SERVICE_ROLE_KEY|SUPABASE_SERVICE_ROLE|SERVICE_ROLE_KEY)\\b/g,\n /\\bsk_live_[0-9A-Za-z]+\\b/g,\n /-----BEGIN [A-Z ]*PRIVATE KEY-----/g,\n ];\n\n return patterns.reduce((count, pattern) => count + (js.match(pattern)?.length ?? 0), 0);\n}\n\nfunction collectFiles(rootDir: string, predicate: (filePath: string) => boolean): string[] {\n if (!existsSync(rootDir)) return [];\n const files: string[] = [];\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const path = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(path);\n continue;\n }\n if (entry.isFile() && predicate(path)) {\n files.push(path);\n }\n }\n };\n\n walk(rootDir);\n return files.sort();\n}\n\nfunction auditNextBuildOutput(projectRoot: string): RuntimeAudit {\n const nextDir = join(projectRoot, '.next');\n const buildIdPresent = existsSync(join(nextDir, 'BUILD_ID'));\n const buildManifestPresent = existsSync(join(nextDir, 'build-manifest.json'));\n const appServerDir = join(nextDir, 'server', 'app');\n const htmlFiles = collectFiles(appServerDir, (filePath) => {\n const relativePath = filePath.slice(appServerDir.length + 1).replace(/\\\\/g, '/');\n return filePath.endsWith('.html') && !relativePath.startsWith('_');\n });\n const htmlDocuments = htmlFiles.map((filePath) => readFileSync(filePath, 'utf-8'));\n const staticAssetFiles = collectFiles(join(nextDir, 'static'), (filePath) =>\n /\\.(?:js|css|json|svg|png|jpe?g|webp)$/i.test(filePath),\n );\n\n let totalAssetBytes = 0;\n let jsAssetBytes = 0;\n let cssAssetBytes = 0;\n let largestAssetPath: string | null = null;\n let largestAssetBytes = 0;\n let combinedJs = '';\n\n for (const assetFile of staticAssetFiles) {\n const byteLength = statSync(assetFile).size;\n const assetPath = `/_next/static/${assetFile.slice(join(nextDir, 'static').length + 1).replace(/\\\\/g, '/')}`;\n totalAssetBytes += byteLength;\n if (assetFile.endsWith('.js')) {\n jsAssetBytes += byteLength;\n combinedJs += readFileSync(assetFile, 'utf-8');\n }\n if (assetFile.endsWith('.css')) {\n cssAssetBytes += byteLength;\n }\n if (byteLength > largestAssetBytes) {\n largestAssetBytes = byteLength;\n largestAssetPath = assetPath;\n }\n }\n\n const hasHtmlDocuments = htmlDocuments.length > 0;\n const titleOk = !hasHtmlDocuments || htmlDocuments.every((html) => /<title>[^<]+<\\/title>/i.test(html));\n const langOk = !hasHtmlDocuments || htmlDocuments.every((html) => /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(html));\n const viewportOk = !hasHtmlDocuments || htmlDocuments.every((html) => /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(html));\n const charsetOk = !hasHtmlDocuments || htmlDocuments.every((html) => /<meta[^>]+charset=/i.test(html));\n const failures: string[] = ['next-build-output'];\n\n if (!buildIdPresent) {\n failures.push('next-build-id-missing');\n }\n if (!buildManifestPresent) {\n failures.push('next-build-manifest-missing');\n }\n if (staticAssetFiles.length === 0) {\n failures.push('next-assets-missing');\n }\n\n const passed = buildIdPresent && buildManifestPresent && staticAssetFiles.length > 0;\n\n return {\n distPresent: true,\n indexPresent: true,\n checked: true,\n passed,\n rootDocumentOk: hasHtmlDocuments || passed,\n titleOk,\n langOk,\n viewportOk,\n charsetOk,\n cspSignalOk: true,\n inlineScriptCount: 0,\n inlineEventHandlerCount: 0,\n externalScriptsWithoutIntegrityCount: 0,\n externalScriptsWithIntegrityMissingCrossoriginCount: 0,\n externalStylesheetsWithoutIntegrityCount: 0,\n externalStylesheetsWithIntegrityMissingCrossoriginCount: 0,\n externalScriptsWithInsecureTransportCount: 0,\n externalStylesheetsWithInsecureTransportCount: 0,\n externalMediaSourcesWithInsecureTransportCount: 0,\n externalBlankLinksWithoutRelCount: 0,\n externalIframesWithoutSandboxCount: 0,\n externalIframesWithInsecureTransportCount: 0,\n jsEvalSignalCount: countDynamicCodeSignals(combinedJs),\n jsHtmlInjectionSignalCount: countHtmlInjectionSignals(combinedJs),\n jsInsecureTransportSignalCount: countInsecureTransportSignals(combinedJs),\n jsSecretSignalCount: countSecretLeakSignals(combinedJs),\n assetCount: staticAssetFiles.length,\n assetsPassed: staticAssetFiles.length,\n routeHintsChecked: [],\n routeHintsMatched: 0,\n routeHintsCoverageOk: true,\n routeDocumentsChecked: 0,\n routeDocumentsPassed: 0,\n routeDocumentsHardenedCount: 0,\n routeDocumentsCoverageOk: true,\n routeDocumentsHardeningOk: true,\n fullRouteCoverageOk: true,\n totalAssetBytes,\n jsAssetBytes,\n cssAssetBytes,\n largestAssetPath,\n largestAssetBytes,\n failures,\n };\n}\n\nfunction normalizeRouteHint(route: string | null | undefined): string {\n if (!route || route === '/') return '/';\n const dynamicIndex = route.indexOf('/:');\n if (dynamicIndex !== -1) {\n return route.slice(0, dynamicIndex + 1);\n }\n return route;\n}\n\nasync function startStaticServer(\n rootDir: string,\n): Promise<{ baseUrl: string; close: () => Promise<void> }> {\n const server = createServer((req, res) => {\n const requestedUrl = new URL(req.url ?? '/', 'http://127.0.0.1');\n const pathname = requestedUrl.pathname === '/' ? '/index.html' : requestedUrl.pathname;\n const relativePath = normalize(pathname)\n .replace(/^[/\\\\]+/, '')\n .replace(/^(\\.\\.[/\\\\])+/, '');\n const filePath = join(rootDir, relativePath);\n const fallbackPath = join(rootDir, 'index.html');\n\n try {\n if (existsSync(filePath)) {\n res.statusCode = 200;\n res.setHeader('Content-Type', getContentType(filePath));\n res.end(readFileSync(filePath));\n return;\n }\n\n if (existsSync(fallbackPath)) {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html; charset=utf-8');\n res.end(readFileSync(fallbackPath));\n return;\n }\n\n res.statusCode = 404;\n res.end('Not found');\n } catch {\n res.statusCode = 500;\n res.end('Internal server error');\n }\n });\n\n await new Promise<void>((resolvePromise, reject) => {\n server.once('error', reject);\n server.listen(0, '127.0.0.1', () => resolvePromise());\n });\n\n const address = server.address();\n if (!address || typeof address === 'string') {\n server.close();\n throw new Error('Failed to bind runtime audit server.');\n }\n\n return {\n baseUrl: `http://127.0.0.1:${address.port}`,\n async close() {\n await new Promise<void>((resolvePromise, reject) =>\n server.close((error) => (error ? reject(error) : resolvePromise())),\n );\n },\n };\n}\n\nexport async function auditBuiltDist(\n projectRoot: string,\n options: BuiltDistAuditOptions = {},\n): Promise<RuntimeAudit> {\n const distDir = options.distDir ?? join(projectRoot, 'dist');\n if (!existsSync(distDir)) {\n if (!options.distDir && existsSync(join(projectRoot, '.next'))) {\n return auditNextBuildOutput(projectRoot);\n }\n return emptyRuntimeAudit(['dist-missing']);\n }\n\n const indexPath = join(distDir, 'index.html');\n if (!existsSync(indexPath)) {\n return {\n ...emptyRuntimeAudit(['index-missing']),\n distPresent: true,\n };\n }\n\n const routeHints =\n Array.isArray(options.routeHints) && options.routeHints.length > 0\n ? options.routeHints\n .map((route) => normalizeRouteHint(route))\n .filter(Boolean)\n .slice(0, 8)\n : ['/'];\n const indexHtml = readFileSync(indexPath, 'utf-8');\n const assetPaths = extractAssetPaths(indexHtml);\n const server = await startStaticServer(distDir);\n\n try {\n const rootResponse = await fetch(`${server.baseUrl}/`);\n const rootHtml = await rootResponse.text();\n const failures: string[] = [];\n const rootDocumentOk = rootResponse.ok && /id=\"root\"/.test(rootHtml);\n const titleOk = /<title>[^<]+<\\/title>/i.test(rootHtml);\n const langOk = /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(rootHtml);\n const viewportOk = /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(rootHtml);\n const charsetOk = /<meta[^>]+charset=/i.test(rootHtml);\n const cspSignalOk = /<meta[^>]+http-equiv=([\"'])Content-Security-Policy\\1/i.test(rootHtml);\n const inlineScriptCount = countInlineScriptTags(rootHtml);\n const inlineEventHandlerCount = countInlineEventHandlerAttributes(rootHtml);\n const externalScriptsWithoutIntegrityCount = countExternalScriptsWithoutIntegrity(rootHtml);\n const externalScriptsWithIntegrityMissingCrossoriginCount =\n countExternalScriptsWithIntegrityMissingCrossorigin(rootHtml);\n const externalStylesheetsWithoutIntegrityCount =\n countExternalStylesheetsWithoutIntegrity(rootHtml);\n const externalStylesheetsWithIntegrityMissingCrossoriginCount =\n countExternalStylesheetsWithIntegrityMissingCrossorigin(rootHtml);\n const externalScriptsWithInsecureTransportCount =\n countExternalScriptsWithInsecureTransport(rootHtml);\n const externalStylesheetsWithInsecureTransportCount =\n countExternalStylesheetsWithInsecureTransport(rootHtml);\n const externalMediaSourcesWithInsecureTransportCount =\n countExternalMediaSourcesWithInsecureTransport(rootHtml);\n const externalBlankLinksWithoutRelCount = countExternalBlankLinksWithoutRel(rootHtml);\n const externalIframesWithoutSandboxCount = countExternalIframesWithoutSandbox(rootHtml);\n const externalIframesWithInsecureTransportCount =\n countExternalIframesWithInsecureTransport(rootHtml);\n\n if (!rootDocumentOk) {\n failures.push('root-document-invalid');\n }\n if (!titleOk) {\n failures.push('root-title-missing');\n }\n if (!langOk) {\n failures.push('root-lang-missing');\n }\n if (!viewportOk) {\n failures.push('root-viewport-missing');\n }\n if (assetPaths.length === 0) {\n failures.push('assets-missing');\n }\n\n let assetsPassed = 0;\n let combinedJs = '';\n let totalAssetBytes = 0;\n let jsAssetBytes = 0;\n let cssAssetBytes = 0;\n let largestAssetPath: string | null = null;\n let largestAssetBytes = 0;\n\n for (const assetPath of assetPaths) {\n const response = await fetch(`${server.baseUrl}${assetPath}`);\n const body = await response.text();\n const byteLength = Buffer.byteLength(body, 'utf-8');\n\n if (response.ok && body.length > 0) {\n assetsPassed += 1;\n totalAssetBytes += byteLength;\n if (assetPath.endsWith('.js')) {\n jsAssetBytes += byteLength;\n }\n if (assetPath.endsWith('.css')) {\n cssAssetBytes += byteLength;\n }\n if (byteLength > largestAssetBytes) {\n largestAssetBytes = byteLength;\n largestAssetPath = assetPath;\n }\n } else {\n failures.push(`asset-fetch-failed:${assetPath}`);\n }\n\n if (assetPath.endsWith('.js')) {\n combinedJs += body;\n }\n }\n\n const routeHintsMatched = routeHints.filter((routeHint) =>\n combinedJs.includes(routeHint),\n ).length;\n const routeHintsCoverageOk = routeHints.length === 0 || routeHintsMatched === routeHints.length;\n const jsEvalSignalCount = countDynamicCodeSignals(combinedJs);\n const jsHtmlInjectionSignalCount = countHtmlInjectionSignals(combinedJs);\n const jsInsecureTransportSignalCount = countInsecureTransportSignals(combinedJs);\n const jsSecretSignalCount = countSecretLeakSignals(combinedJs);\n if (routeHints.length > 0 && routeHintsMatched < Math.min(2, routeHints.length)) {\n failures.push('route-hints-missing');\n }\n\n let routeDocumentsPassed = 0;\n let routeDocumentsHardenedCount = 0;\n for (const routeHint of routeHints) {\n const routeResponse = await fetch(`${server.baseUrl}${routeHint}`);\n const routeHtml = await routeResponse.text();\n const routeRootDocumentOk = routeResponse.ok && /id=\"root\"/.test(routeHtml);\n const routeTitleOk = /<title>[^<]+<\\/title>/i.test(routeHtml);\n const routeLangOk = /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(routeHtml);\n const routeViewportOk = /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(routeHtml);\n const routeCharsetOk = /<meta[^>]+charset=/i.test(routeHtml);\n if (routeRootDocumentOk) {\n routeDocumentsPassed += 1;\n if (routeTitleOk && routeLangOk && routeViewportOk && routeCharsetOk) {\n routeDocumentsHardenedCount += 1;\n } else {\n failures.push(`route-document-hardening-failed:${routeHint}`);\n }\n } else {\n failures.push(`route-document-failed:${routeHint}`);\n }\n }\n\n const routeDocumentsChecked = routeHints.length;\n const routeDocumentsCoverageOk =\n routeDocumentsChecked === 0 || routeDocumentsPassed === routeDocumentsChecked;\n const routeDocumentsHardeningOk =\n routeDocumentsChecked === 0 || routeDocumentsHardenedCount === routeDocumentsChecked;\n const fullRouteCoverageOk = routeHintsCoverageOk && routeDocumentsCoverageOk;\n if (routeDocumentsChecked > 0 && routeDocumentsPassed < Math.min(2, routeDocumentsChecked)) {\n failures.push('route-documents-missing');\n }\n if (\n routeDocumentsChecked > 0 &&\n routeDocumentsHardenedCount < Math.min(2, routeDocumentsChecked)\n ) {\n failures.push('route-documents-hardening-missing');\n }\n\n const passed =\n rootDocumentOk &&\n titleOk &&\n assetPaths.length > 0 &&\n assetsPassed === assetPaths.length &&\n (routeDocumentsChecked === 0 || routeDocumentsPassed >= Math.min(2, routeDocumentsChecked)) &&\n (routeHints.length === 0 || routeHintsMatched >= Math.min(2, routeHints.length));\n\n return {\n distPresent: true,\n indexPresent: true,\n checked: true,\n passed,\n rootDocumentOk,\n titleOk,\n langOk,\n viewportOk,\n charsetOk,\n cspSignalOk,\n inlineScriptCount,\n inlineEventHandlerCount,\n externalScriptsWithoutIntegrityCount,\n externalScriptsWithIntegrityMissingCrossoriginCount,\n externalStylesheetsWithoutIntegrityCount,\n externalStylesheetsWithIntegrityMissingCrossoriginCount,\n externalScriptsWithInsecureTransportCount,\n externalStylesheetsWithInsecureTransportCount,\n externalMediaSourcesWithInsecureTransportCount,\n externalBlankLinksWithoutRelCount,\n externalIframesWithoutSandboxCount,\n externalIframesWithInsecureTransportCount,\n jsEvalSignalCount,\n jsHtmlInjectionSignalCount,\n jsInsecureTransportSignalCount,\n jsSecretSignalCount,\n assetCount: assetPaths.length,\n assetsPassed,\n routeHintsChecked: routeHints,\n routeHintsMatched,\n routeHintsCoverageOk,\n routeDocumentsChecked,\n routeDocumentsPassed,\n routeDocumentsHardenedCount,\n routeDocumentsCoverageOk,\n routeDocumentsHardeningOk,\n fullRouteCoverageOk,\n totalAssetBytes,\n jsAssetBytes,\n cssAssetBytes,\n largestAssetPath,\n largestAssetBytes,\n failures,\n };\n } finally {\n await server.close();\n }\n}\n","/**\n * Experiential interaction verifier.\n *\n * Scans generated source files for evidence that declared `interactions[]`\n * (from pattern.v2.json) are actually implemented. This is the enforcement\n * layer that converts the structural-vs-experiential gap (user audit:\n * \"experiential reads like guidance, nothing fails when I skip it\") into\n * a hard-edged structural check, on par with the other guard rules.\n *\n * Scanner is intentionally simple: regex/substring signal matching, not\n * full AST analysis. Each interaction defines one or more signals that\n * MUST appear somewhere in the project source. A signal is either:\n * - a CSS class name (e.g., `d-pulse` for status-pulse)\n * - a regex (e.g., /onPointer(Down|Move)/ for drag-nodes)\n * If no signal matches, the interaction is marked as \"missing\" and the\n * guard rule emits a violation.\n *\n * Why grep, not AST: scaffolds use diverse file shapes (JSX, MDX, plain\n * HTML in marketing sites). A regex scan handles all of them; a real AST\n * matcher would need framework-specific parsers per blueprint kind. Grep\n * gets us 80% of the value at 10% of the complexity.\n */\n\n/** Either a literal substring or a regex pattern. */\nexport type InteractionSignal = string | RegExp;\n\nexport interface InteractionRequirement {\n /** The interaction name from pattern.v2.json's enum. */\n interaction: string;\n /**\n * One or more signals; ANY match satisfies the requirement. Allows\n * authors flexibility — e.g., either `d-pulse` class OR a custom\n * `@keyframes pulse` declaration both count for status-pulse.\n */\n signals: InteractionSignal[];\n /** Human-readable suggestion when signals don't match. */\n suggestion: string;\n}\n\n/**\n * Mapping from canonical interaction name (pattern.v2.json enum) to its\n * required signals. Add entries as new interactions are introduced.\n */\nexport const INTERACTION_SIGNALS: Record<string, InteractionRequirement> = {\n 'animate-on-mount': {\n interaction: 'animate-on-mount',\n signals: ['d-enter-fade', 'd-enter-slide-up', 'd-enter-scale', 'animate-on-mount'],\n suggestion: 'Add `d-enter-fade`, `d-enter-slide-up`, or `d-enter-scale` to the pattern root.',\n },\n 'stagger-children': {\n interaction: 'stagger-children',\n signals: ['d-stagger-children', '--d-stagger-index'],\n suggestion:\n 'Apply `d-stagger-children` to the parent and `style={{ \"--d-stagger-index\": i }}` to each child.',\n },\n 'status-pulse': {\n interaction: 'status-pulse',\n signals: ['d-pulse', 'd-pulse-ring', /@keyframes\\s+pulse/],\n suggestion: 'Apply `d-pulse` or `d-pulse-ring` to the status indicator element.',\n },\n 'shimmer-skeleton': {\n interaction: 'shimmer-skeleton',\n signals: ['d-shimmer', /@keyframes\\s+shimmer/],\n suggestion: 'Apply `d-shimmer` to the skeleton/loading element.',\n },\n 'float-idle': {\n interaction: 'float-idle',\n signals: ['d-float'],\n suggestion: 'Apply `d-float` to the floating decorative element.',\n },\n 'glow-hover': {\n interaction: 'glow-hover',\n signals: ['d-glow-hover'],\n suggestion: 'Apply `d-glow-hover` to the interactive surface.',\n },\n 'lift-hover': {\n interaction: 'lift-hover',\n signals: ['d-lift-hover'],\n suggestion: 'Apply `d-lift-hover` to the interactive card/tile.',\n },\n 'scale-hover': {\n interaction: 'scale-hover',\n signals: ['d-scale-hover'],\n suggestion: 'Apply `d-scale-hover` to the interactive element.',\n },\n 'ripple-click': {\n interaction: 'ripple-click',\n signals: ['d-ripple'],\n suggestion: 'Apply `d-ripple` to the button or interactive surface.',\n },\n 'drag-nodes': {\n interaction: 'drag-nodes',\n signals: [/onPointer(Down|Move|Up)/i, /onMouse(Down|Move|Up)/i, /'?cursor.*?grab/i],\n suggestion:\n 'Implement pointer event handlers (onPointerDown/Move/Up) with a 4px movement threshold before drag engages. Apply cursor: grab/grabbing.',\n },\n 'drag-reorder': {\n interaction: 'drag-reorder',\n signals: [/onPointer(Down|Move)/i, /draggable/i, /dnd|drag.{0,10}drop/i],\n suggestion: 'Implement drag-to-reorder via pointer events or a dnd library.',\n },\n 'pan-background': {\n interaction: 'pan-background',\n signals: [/onPointer(Down|Move)/i, /transform.*?translate/i, /viewBox/],\n suggestion:\n 'Implement pointer handlers on the canvas BACKGROUND only (not nodes); update a viewport translate transform on drag.',\n },\n 'zoom-scroll': {\n interaction: 'zoom-scroll',\n signals: [/onWheel/i, /transform.*?scale/i],\n suggestion:\n 'Implement an onWheel handler that adjusts a `scale` transform, clamped to [0.25, 4]. Show a zoom indicator.',\n },\n 'zoom-pinch': {\n interaction: 'zoom-pinch',\n signals: [/touchstart|touchmove|gesturechange/i, /pinch/i],\n suggestion: 'Implement pinch-to-zoom via touch events or gestureend.',\n },\n 'click-select': {\n interaction: 'click-select',\n signals: [/onClick/i, /selected/i, /aria-selected/i],\n suggestion:\n 'Implement click-to-select state via onClick handlers; reflect selection via aria-selected or a \"selected\" class.',\n },\n 'click-connect': {\n interaction: 'click-connect',\n signals: [/onClick.*?port|connect/i, /connections?\\s*[:[=]/i],\n suggestion:\n 'Implement a two-click state machine: first click selects a port, second click on another port creates a connection. Store connections in component state.',\n },\n 'inline-edit': {\n interaction: 'inline-edit',\n signals: [/contenteditable|input.*?onBlur|onKeyDown.*?Enter/i, 'isEditing'],\n suggestion:\n 'Replace static text with a controlled <input> on click; commit on blur or Enter keyDown.',\n },\n 'hover-tooltip': {\n interaction: 'hover-tooltip',\n signals: [/data-tooltip|onMouseEnter|tooltip/i, 'role=\"tooltip\"'],\n suggestion:\n 'Implement a hover-triggered tooltip: data-tooltip attribute or onMouseEnter/Leave handlers showing/hiding a popover.',\n },\n 'hover-reveal': {\n interaction: 'hover-reveal',\n signals: [/:hover/i, /onMouseEnter/i, /group-hover/i],\n suggestion: 'Implement hover-triggered content reveal via :hover CSS or onMouseEnter handlers.',\n },\n 'live-simulation': {\n interaction: 'live-simulation',\n signals: [/setInterval|setTimeout|requestAnimationFrame/i, /useEffect/i],\n suggestion:\n 'Implement live data simulation via setInterval (2-4 second cadence) updating mock state; animate changes with `d-pulse` on the changed element.',\n },\n 'real-time-updates': {\n interaction: 'real-time-updates',\n signals: [/setInterval|WebSocket|EventSource|subscribe/i],\n suggestion:\n 'Implement real-time updates via WebSocket, EventSource, or polling with setInterval.',\n },\n 'scroll-reveal': {\n interaction: 'scroll-reveal',\n signals: [/IntersectionObserver/i, /onScroll/i],\n suggestion: 'Implement scroll-triggered reveal via IntersectionObserver (once: true).',\n },\n 'keyboard-navigation': {\n interaction: 'keyboard-navigation',\n signals: [/onKeyDown|onKeyUp/i, /ArrowUp|ArrowDown|ArrowLeft|ArrowRight/],\n suggestion: 'Implement arrow-key navigation via onKeyDown handlers (ArrowUp/Down/Left/Right).',\n },\n 'focus-trap': {\n interaction: 'focus-trap',\n signals: [/focusTrap|tabindex|aria-modal/i, /useFocusTrap/],\n suggestion:\n 'Implement focus trap inside modal/dialog — listen for Tab key, cycle focus within the dialog, restore focus on close.',\n },\n};\n\nexport interface InteractionMissingFinding {\n interaction: string;\n suggestion: string;\n scannedFiles?: number;\n scannedLocations?: Array<{ file: string; startLine: number; endLine: number }>;\n expectedSignals?: string[];\n}\n\nfunction sourceLineCount(source: string): number {\n return Math.max(1, source.replace(/\\r?\\n$/, '').split(/\\r?\\n/).length);\n}\n\n/**\n * Scan a source-tree map (file path → file contents) for evidence of each\n * declared interaction. Returns a list of interactions whose signals were\n * not found anywhere in the source.\n *\n * @param interactions Declared interactions from one or more page packs.\n * Duplicates collapse to a single check.\n * @param sources Map of file path → file contents to scan.\n * @returns List of interactions that have no matching signal.\n */\nexport function verifyInteractionsInSource(\n interactions: string[],\n sources: Map<string, string>,\n): InteractionMissingFinding[] {\n if (interactions.length === 0 || sources.size === 0) return [];\n\n const unique = Array.from(new Set(interactions));\n const missing: InteractionMissingFinding[] = [];\n\n for (const interaction of unique) {\n const requirement = INTERACTION_SIGNALS[interaction];\n if (!requirement) {\n // Unknown interaction — skip silently. Forward-compatible with\n // future enum additions that this scanner doesn't yet recognize.\n continue;\n }\n\n let matched = false;\n for (const source of sources.values()) {\n matched = requirement.signals.some((signal) => {\n if (typeof signal === 'string') {\n return source.includes(signal);\n }\n signal.lastIndex = 0;\n return signal.test(source);\n });\n if (matched) break;\n }\n\n if (!matched) {\n missing.push({\n interaction,\n suggestion: requirement.suggestion,\n scannedFiles: sources.size,\n scannedLocations: [...sources.entries()].slice(0, 8).map(([file, source]) => ({\n file,\n startLine: 1,\n endLine: sourceLineCount(source),\n })),\n expectedSignals: requirement.signals.map((signal) =>\n typeof signal === 'string' ? signal : String(signal),\n ),\n });\n }\n }\n\n return missing;\n}\n\n/**\n * Convenience: list every recognized interaction name. Useful for\n * documentation, validation, and surfacing the canonical enum.\n */\nexport function listKnownInteractions(): string[] {\n return Object.keys(INTERACTION_SIGNALS).sort();\n}\n"],"mappings":"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K,IAAI,IAAI,IAAI,IAAI,CAAC;AACpF;AAEA,SAAS,uCAAuC,MAAsB;AACpE,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAC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","names":["existsSync","readdirSync","readFileSync","statSync","extname","join","existsSync","readFileSync","join","statSync","readdirSync","normalizeRouteHint","extname","valueContainsInsecureRemoteAsset","result","resolvedObjectLiteral","functionLike","hasInsecureFormAction","hasInsecureAuthFormMethod"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/runtime.ts","../src/interactions.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { existsSync, readdirSync, readFileSync, realpathSync, statSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport { basename, dirname, extname, isAbsolute, join, relative, resolve } from 'node:path';\nimport type { ReviewExecutionPack } from '@decantr/core';\nimport type { EssenceFile, EssenceV4, GuardViolation } from '@decantr/essence-spec';\nimport { evaluateGuard, isV4, validateEssence } from '@decantr/essence-spec';\nimport * as ts from 'typescript';\nimport { auditBuiltDist, emptyRuntimeAudit, type RuntimeAudit } from './runtime.js';\n\nexport type {\n InteractionMissingFinding,\n InteractionRequirement,\n InteractionSignal,\n} from './interactions.js';\n// V4 C4 — experiential interaction verifier.\nexport {\n INTERACTION_SIGNALS,\n listKnownInteractions,\n verifyInteractionsInSource,\n} from './interactions.js';\nexport type { BuiltDistAuditOptions, RuntimeAudit } from './runtime.js';\nexport { auditBuiltDist, emptyRuntimeAudit } from './runtime.js';\n\nexport const VERIFICATION_SCHEMA_URLS = {\n common: 'https://decantr.ai/schemas/verification-report.common.v1.json',\n projectAudit: 'https://decantr.ai/schemas/project-audit-report.v1.json',\n projectHealth: 'https://decantr.ai/schemas/project-health-report.v1.json',\n decantrCi: 'https://decantr.ai/schemas/decantr-ci-report.v1.json',\n evidenceBundle: 'https://decantr.ai/schemas/evidence-bundle.v1.json',\n workspaceHealth: 'https://decantr.ai/schemas/workspace-health-report.v1.json',\n fileCritique: 'https://decantr.ai/schemas/file-critique-report.v1.json',\n showcaseShortlist: 'https://decantr.ai/schemas/showcase-shortlist-report.v1.json',\n} as const;\n\nexport type VerificationSeverity = 'error' | 'warn' | 'info';\nexport type ProjectHealthStatus = 'healthy' | 'warning' | 'error';\nexport type ProjectHealthFindingSource =\n | 'audit'\n | 'assertion'\n | 'browser'\n | 'check'\n | 'brownfield'\n | 'design-token'\n | 'runtime'\n | 'pack'\n | 'interaction';\n\nexport interface VerificationFinding {\n id: string;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n}\n\nexport interface VerificationScore {\n category: string;\n focusArea: string;\n score: number;\n details: string;\n suggestions: string[];\n}\n\ninterface PackManifestEntry {\n id: string;\n markdown: string;\n json: string;\n}\n\nexport interface PackManifest {\n $schema?: string;\n version: string;\n generatedAt: string;\n scaffold: PackManifestEntry | null;\n review?: PackManifestEntry | null;\n sections: Array<PackManifestEntry & { pageIds: string[] }>;\n pages: Array<PackManifestEntry & { sectionId: string | null; sectionRole: string | null }>;\n mutations?: Array<PackManifestEntry & { mutationType: string }>;\n}\n\nexport interface MissingPackManifestFile {\n entryId: string;\n kind: 'scaffold' | 'review' | 'section' | 'page' | 'mutation';\n field: 'markdown' | 'json';\n relativePath: string;\n absolutePath: string;\n}\n\nexport interface ProjectAuditReport {\n $schema: string;\n projectRoot: string;\n valid: boolean;\n essence: EssenceFile | null;\n reviewPack: ReviewExecutionPack | null;\n packManifest: PackManifest | null;\n runtimeAudit: RuntimeAudit;\n findings: VerificationFinding[];\n summary: {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n essenceVersion: string | null;\n reviewPackPresent: boolean;\n packManifestPresent: boolean;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n pageCount: number;\n };\n}\n\nexport interface ProjectHealthRemediation {\n summary: string;\n prompt: string;\n commands: string[];\n}\n\nexport interface ProjectHealthFinding {\n id: string;\n source: ProjectHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n file?: string;\n rule?: string;\n suggestedFix?: string;\n remediation: ProjectHealthRemediation;\n}\n\nexport interface ProjectHealthRouteSummary {\n declared: string[];\n runtimeChecked: string[];\n runtimeMatched: number;\n runtimeCoverageOk: boolean | null;\n issues: string[];\n}\n\nexport interface ProjectHealthPackSummary {\n manifestPresent: boolean;\n reviewPackPresent: boolean;\n scaffoldPackPresent: boolean;\n sectionPackCount: number;\n pagePackCount: number;\n mutationPackCount: number;\n generatedAt: string | null;\n}\n\nexport interface ProjectHealthReport {\n $schema: string;\n generatedAt: string;\n projectRoot: string;\n status: ProjectHealthStatus;\n score: number;\n summary: {\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n workflowMode: string | null;\n adoptionMode: string | null;\n essenceVersion: string | null;\n pageCount: number;\n runtimeAuditChecked: boolean;\n runtimePassed: boolean | null;\n packManifestPresent: boolean;\n reviewPackPresent: boolean;\n };\n routes: ProjectHealthRouteSummary;\n packs: ProjectHealthPackSummary;\n ci: {\n recommendedCommand: string;\n failOn: 'error' | 'warn' | 'none';\n };\n findings: ProjectHealthFinding[];\n}\n\nexport type ContractAssertionCategory =\n | 'route'\n | 'shell'\n | 'region'\n | 'interaction'\n | 'accessibility'\n | 'design-token'\n | 'context'\n | 'policy';\n\nexport interface ContractAssertion {\n id: string;\n category: ContractAssertionCategory;\n status: 'passed' | 'failed' | 'not_applicable';\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n rule: string;\n suggestedFix?: string;\n}\n\nexport interface EvidenceProvenanceEntry {\n path: string;\n present: boolean;\n hash: string | null;\n generatedAt: string | null;\n}\n\nexport interface EvidenceBundle {\n $schema: string;\n generatedAt: string;\n project: {\n id: string;\n rootLabel: string;\n };\n toolchain: {\n verifierVersion: string | null;\n };\n privacy: {\n localOnly: boolean;\n redactedFields: string[];\n screenshotsLocalOnly: boolean;\n };\n health: {\n status: ProjectHealthStatus;\n score: number;\n errorCount: number;\n warnCount: number;\n infoCount: number;\n findingCount: number;\n };\n provenance: {\n essence: EvidenceProvenanceEntry;\n packManifest: EvidenceProvenanceEntry;\n reviewPack: EvidenceProvenanceEntry;\n workspaceConfig?: EvidenceProvenanceEntry;\n designTokens?: EvidenceProvenanceEntry;\n };\n assertions: ContractAssertion[];\n findings: Array<{\n id: string;\n source: ProjectHealthFindingSource;\n category: string;\n severity: VerificationSeverity;\n message: string;\n evidence: string[];\n target?: string;\n rule?: string;\n suggestedFix?: string;\n remediationSummary: string;\n commands: string[];\n promptCommand: string;\n }>;\n browser?: {\n enabled: boolean;\n status: 'not_requested' | 'unavailable' | 'passed' | 'failed';\n baseUrl: string | null;\n screenshots: string[];\n findings: string[];\n };\n designTokens?: {\n source: string;\n status: 'not_requested' | 'passed' | 'warning' | 'error';\n compared: number;\n matched: number;\n missing: string[];\n };\n}\n\nexport interface EvidenceBundleInput {\n projectRoot: string;\n report: ProjectHealthReport;\n audit?: ProjectAuditReport | null;\n assertions?: ContractAssertion[];\n verifierVersion?: string | null;\n workspaceConfigPath?: string | null;\n designTokensPath?: string | null;\n browser?: EvidenceBundle['browser'];\n designTokens?: EvidenceBundle['designTokens'];\n}\n\nexport const EVIDENCE_BUNDLE_SCHEMA_URL = 'https://decantr.ai/schemas/evidence-bundle.v1.json';\n\nfunction hashString(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 16);\n}\n\nfunction hashFile(path: string): string | null {\n if (!existsSync(path)) return null;\n try {\n return createHash('sha256').update(readFileSync(path)).digest('hex');\n } catch {\n return null;\n }\n}\n\nfunction provenanceEntry(projectRoot: string, relativePath: string): EvidenceProvenanceEntry {\n const path = join(projectRoot, relativePath);\n if (!existsSync(path)) {\n return {\n path: relativePath,\n present: false,\n hash: null,\n generatedAt: null,\n };\n }\n\n let generatedAt: string | null = null;\n try {\n generatedAt = statSync(path).mtime.toISOString();\n } catch {\n generatedAt = null;\n }\n\n return {\n path: relativePath,\n present: true,\n hash: hashFile(path),\n generatedAt,\n };\n}\n\nfunction provenanceForPath(projectRoot: string, path: string): EvidenceProvenanceEntry {\n const rel = isAbsolute(path) ? relative(projectRoot, path).replace(/\\\\/g, '/') : path;\n return provenanceEntry(projectRoot, rel && !rel.startsWith('..') ? rel : basename(path));\n}\n\nfunction redactEvidenceText(projectRoot: string, value: string): string {\n const normalizedRoot = projectRoot.replace(/\\\\/g, '/');\n const normalized = value.replace(/\\\\/g, '/');\n if (normalized.includes(normalizedRoot)) {\n return normalized.split(normalizedRoot).join('<project>');\n }\n return normalized.replace(/\\/Users\\/[^/\\s]+/g, '~').replace(/\\/home\\/[^/\\s]+/g, '~');\n}\n\nfunction redactEvidenceList(projectRoot: string, evidence: string[]): string[] {\n return evidence.map((entry) => redactEvidenceText(projectRoot, entry));\n}\n\nfunction assertion(\n input: Omit<ContractAssertion, 'status'> & { status?: ContractAssertion['status'] },\n): ContractAssertion {\n return {\n status: 'passed',\n ...input,\n };\n}\n\nexport function createContractAssertions(\n projectRoot: string,\n audit?: ProjectAuditReport | null,\n): ContractAssertion[] {\n const assertions: ContractAssertion[] = [];\n const essence = audit?.essence;\n const v4 = essence && isV4(essence) ? essence : null;\n const contextDir = join(projectRoot, '.decantr', 'context');\n const packManifest = audit?.packManifest ?? null;\n\n assertions.push(\n assertion({\n id: 'contract.essence.present',\n category: 'context',\n severity: 'error',\n rule: 'essence-present',\n status: essence ? 'passed' : 'failed',\n message: essence\n ? 'Decantr Essence contract is present.'\n : 'No Decantr Essence contract was found.',\n evidence: [redactEvidenceText(projectRoot, join(projectRoot, 'decantr.essence.json'))],\n suggestedFix: essence ? undefined : 'Run `decantr init` or restore decantr.essence.json.',\n }),\n );\n\n assertions.push(\n assertion({\n id: 'contract.essence.v4',\n category: 'context',\n severity: 'error',\n rule: 'essence-v4',\n status: v4 ? 'passed' : essence ? 'failed' : 'not_applicable',\n message: v4\n ? 'Essence uses the active v4.0.0 contract.'\n : essence\n ? 'Essence is not the active v4.0.0 contract.'\n : 'Essence version could not be checked.',\n evidence: [essence ? `version=${String(essence.version)}` : 'essence missing'],\n suggestedFix: v4 ? undefined : 'Run `decantr migrate --to v4` before reliability checks.',\n }),\n );\n\n if (v4) {\n const declaredRoutes = Object.keys(v4.blueprint.routes ?? {}).sort();\n for (const route of declaredRoutes) {\n const routeTarget = (v4.blueprint.routes ?? {})[route];\n const section = v4.blueprint.sections.find((entry) => entry.id === routeTarget.section);\n const page = section?.pages.find((entry) => entry.id === routeTarget.page);\n assertions.push(\n assertion({\n id: `contract.route.${hashString(route)}`,\n category: 'route',\n severity: page ? 'info' : 'warn',\n rule: 'declared-route-resolves',\n status: page ? 'passed' : 'failed',\n target: route,\n message: page\n ? `Declared route ${route} resolves to a section page.`\n : `Declared route ${route} does not resolve to an existing section page.`,\n evidence: [`section=${routeTarget.section}`, `page=${routeTarget.page}`],\n suggestedFix: page\n ? undefined\n : 'Update blueprint.routes or add the missing section/page before running AI repair.',\n }),\n );\n }\n\n for (const section of v4.blueprint.sections) {\n assertions.push(\n assertion({\n id: `contract.shell.${section.id}`,\n category: 'shell',\n severity: section.shell && section.shell !== 'inherit' ? 'info' : 'warn',\n rule: 'section-shell-concrete',\n status: section.shell && section.shell !== 'inherit' ? 'passed' : 'failed',\n target: section.id,\n message:\n section.shell && section.shell !== 'inherit'\n ? `Section ${section.id} uses concrete shell ${section.shell}.`\n : `Section ${section.id} does not declare a concrete shell.`,\n evidence: [`shell=${section.shell || 'missing'}`],\n suggestedFix:\n section.shell && section.shell !== 'inherit'\n ? undefined\n : 'Resolve inherited shells during composition so AI agents get concrete layout intent.',\n }),\n );\n }\n\n assertions.push(\n assertion({\n id: 'contract.accessibility.focus-visible',\n category: 'accessibility',\n severity: v4.dna.accessibility.focus_visible ? 'info' : 'warn',\n rule: 'focus-visible-enabled',\n status: v4.dna.accessibility.focus_visible ? 'passed' : 'failed',\n message: v4.dna.accessibility.focus_visible\n ? 'DNA requires visible focus states.'\n : 'DNA does not require visible focus states.',\n evidence: [`focus_visible=${String(v4.dna.accessibility.focus_visible)}`],\n suggestedFix: v4.dna.accessibility.focus_visible\n ? undefined\n : 'Set dna.accessibility.focus_visible=true for stronger UI reliability gates.',\n }),\n );\n }\n\n assertions.push(\n assertion({\n id: 'contract.context.pack-manifest',\n category: 'context',\n severity: packManifest ? 'info' : 'warn',\n rule: 'pack-manifest-present',\n status: packManifest ? 'passed' : 'failed',\n message: packManifest\n ? 'Compiled execution pack manifest is present.'\n : 'Compiled execution pack manifest is missing.',\n evidence: [redactEvidenceText(projectRoot, join(contextDir, 'pack-manifest.json'))],\n suggestedFix: packManifest\n ? undefined\n : 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate the full context pack bundle.',\n }),\n );\n\n assertions.push(\n assertion({\n id: 'contract.context.review-pack',\n category: 'context',\n severity: audit?.reviewPack ? 'info' : 'warn',\n rule: 'review-pack-present',\n status: audit?.reviewPack ? 'passed' : 'failed',\n message: audit?.reviewPack\n ? 'Compiled review pack is present.'\n : 'Compiled review pack is missing.',\n evidence: [redactEvidenceText(projectRoot, join(contextDir, 'review-pack.json'))],\n suggestedFix: audit?.reviewPack\n ? undefined\n : 'Run `decantr registry compile-packs decantr.essence.json --write-context` so critique has the compiled review contract.',\n }),\n );\n\n const tokensPath = join(projectRoot, 'src', 'styles', 'tokens.css');\n assertions.push(\n assertion({\n id: 'contract.design-token.tokens-file',\n category: 'design-token',\n severity: existsSync(tokensPath) ? 'info' : 'warn',\n rule: 'tokens-file-present',\n status: existsSync(tokensPath) ? 'passed' : 'failed',\n message: existsSync(tokensPath)\n ? 'Decantr token CSS file is present.'\n : 'Decantr token CSS file was not found.',\n evidence: [redactEvidenceText(projectRoot, tokensPath)],\n suggestedFix: existsSync(tokensPath)\n ? undefined\n : 'Run `decantr refresh` or map Decantr tokens into the existing styling system.',\n }),\n );\n\n return assertions;\n}\n\nexport function createEvidenceBundle(input: EvidenceBundleInput): EvidenceBundle {\n const assertions = input.assertions ?? createContractAssertions(input.projectRoot, input.audit);\n let resolvedProjectRoot = input.projectRoot;\n try {\n resolvedProjectRoot = realpathSync(input.projectRoot);\n } catch {\n resolvedProjectRoot = resolve(input.projectRoot);\n }\n const projectId = `project_${hashString(resolvedProjectRoot)}`;\n\n return {\n $schema: EVIDENCE_BUNDLE_SCHEMA_URL,\n generatedAt: new Date().toISOString(),\n project: {\n id: projectId,\n rootLabel: basename(input.projectRoot) || 'project',\n },\n toolchain: {\n verifierVersion: input.verifierVersion ?? null,\n },\n privacy: {\n localOnly: true,\n redactedFields: [\n 'source',\n 'prompt',\n 'secret',\n 'environment',\n 'absolute_path',\n 'repository_name',\n ],\n screenshotsLocalOnly: true,\n },\n health: {\n status: input.report.status,\n score: input.report.score,\n errorCount: input.report.summary.errorCount,\n warnCount: input.report.summary.warnCount,\n infoCount: input.report.summary.infoCount,\n findingCount: input.report.summary.findingCount,\n },\n provenance: {\n essence: provenanceEntry(input.projectRoot, 'decantr.essence.json'),\n packManifest: provenanceEntry(input.projectRoot, '.decantr/context/pack-manifest.json'),\n reviewPack: provenanceEntry(input.projectRoot, '.decantr/context/review-pack.json'),\n ...(input.workspaceConfigPath\n ? { workspaceConfig: provenanceForPath(input.projectRoot, input.workspaceConfigPath) }\n : {}),\n ...(input.designTokensPath\n ? { designTokens: provenanceForPath(input.projectRoot, input.designTokensPath) }\n : {}),\n },\n assertions,\n findings: input.report.findings.map((finding) => ({\n id: finding.id,\n source: finding.source,\n category: finding.category,\n severity: finding.severity,\n message: redactEvidenceText(input.projectRoot, finding.message),\n evidence: redactEvidenceList(input.projectRoot, finding.evidence),\n target: finding.target ? redactEvidenceText(input.projectRoot, finding.target) : undefined,\n rule: finding.rule,\n suggestedFix: finding.suggestedFix,\n remediationSummary: finding.remediation.summary,\n commands: finding.remediation.commands,\n promptCommand: `decantr health --prompt ${finding.id}`,\n })),\n ...(input.browser ? { browser: input.browser } : {}),\n ...(input.designTokens ? { designTokens: input.designTokens } : {}),\n };\n}\n\nexport interface FileCritiqueReport {\n $schema: string;\n file: string;\n overall: number;\n scores: VerificationScore[];\n findings: VerificationFinding[];\n focusAreas: string[];\n reviewPack: ReviewExecutionPack | null;\n}\n\nexport interface CritiqueSourceInput {\n filePath: string;\n code: string;\n reviewPack?: ReviewExecutionPack | null;\n packManifest?: PackManifest | null;\n treatmentsCss?: string;\n adoptionMode?: string | null;\n}\n\nexport interface ShowcaseShortlistVerificationEntry {\n slug: string;\n target: string | null;\n classification: 'pending' | 'A' | 'B' | 'C' | 'D';\n verificationStatus: 'pending' | 'build-green' | 'build-red' | 'smoke-green' | 'smoke-red';\n build: {\n passed: boolean | null;\n durationMs: number;\n };\n smoke: {\n passed: boolean | null;\n durationMs: number;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsCoverageOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n };\n drift: {\n signal: 'lower' | 'moderate' | 'elevated';\n penalty: number;\n inlineStyleCount: number;\n hardcodedColorCount: number;\n utilityLeakageCount: number;\n decantrTreatmentCount: number;\n hasPackManifest: boolean;\n hasDist: boolean;\n };\n}\n\nexport interface ShowcaseShortlistVerificationReport {\n $schema: string;\n generatedAt: string;\n dryRun: boolean;\n summary: {\n appCount: number;\n passedBuilds: number;\n failedBuilds: number;\n averageDurationMs: number;\n passedSmokes: number;\n failedSmokes: number;\n averageSmokeDurationMs: number;\n appsWithTitleOkCount: number;\n appsWithLangOkCount: number;\n appsWithViewportOkCount: number;\n appsWithCharsetOkCount: number;\n appsWithoutInlineScriptsCount: number;\n appsWithCspSignalCount: number;\n appsWithExternalScriptIntegrityCount: number;\n appsWithoutInsecureRemoteAssetTransportCount: number;\n appsWithRouteCoverageCount: number;\n appsWithFullRouteCoverageCount: number;\n averageTotalAssetBytes: number;\n averageJsAssetBytes: number;\n averageCssAssetBytes: number;\n lowerDriftCount: number;\n moderateDriftCount: number;\n elevatedDriftCount: number;\n withPackManifestCount: number;\n };\n results: ShowcaseShortlistVerificationEntry[];\n}\n\nconst DEFAULT_FOCUS_AREAS = [\n 'route-topology',\n 'theme-consistency',\n 'treatment-usage',\n 'accessibility',\n 'responsive-design',\n];\n\nconst TREATMENT_CLASSES = [\n 'd-interactive',\n 'd-surface',\n 'd-data',\n 'd-control',\n 'd-section',\n 'd-annotation',\n 'd-label',\n];\nconst PERSONALITY_UTILS = [\n 'neon-glow',\n 'neon-text-glow',\n 'neon-border-glow',\n 'mono-data',\n 'status-ring',\n 'entrance-fade',\n];\nconst PERFORMANCE_BUDGETS = {\n largestJsAssetWarnBytes: 350_000,\n totalJsWarnBytes: 700_000,\n totalCssWarnBytes: 150_000,\n totalAssetsWarnBytes: 1_500_000,\n} as const;\n\nfunction scoreRatio(numerator: number, denominator: number): number {\n if (denominator <= 0) return 3;\n return Math.min(5, Math.max(1, Math.round((numerator / denominator) * 5)));\n}\n\nfunction readJsonIfExists<T>(path: string): T | null {\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, 'utf-8')) as T;\n } catch {\n return null;\n }\n}\n\nfunction loadReviewPack(projectRoot: string): ReviewExecutionPack | null {\n return readJsonIfExists<ReviewExecutionPack>(\n join(projectRoot, '.decantr', 'context', 'review-pack.json'),\n );\n}\n\nfunction loadPackManifest(projectRoot: string): PackManifest | null {\n return readJsonIfExists<PackManifest>(\n join(projectRoot, '.decantr', 'context', 'pack-manifest.json'),\n );\n}\n\nfunction collectPackManifestReferences(packManifest: PackManifest): Array<{\n entryId: string;\n kind: MissingPackManifestFile['kind'];\n markdown?: string;\n json?: string;\n}> {\n const references: Array<{\n entryId: string;\n kind: MissingPackManifestFile['kind'];\n markdown?: string;\n json?: string;\n }> = [];\n\n if (packManifest.scaffold) {\n references.push({\n entryId: packManifest.scaffold.id || 'scaffold',\n kind: 'scaffold',\n markdown: packManifest.scaffold.markdown,\n json: packManifest.scaffold.json,\n });\n }\n if (packManifest.review) {\n references.push({\n entryId: packManifest.review.id || 'review',\n kind: 'review',\n markdown: packManifest.review.markdown,\n json: packManifest.review.json,\n });\n }\n for (const section of packManifest.sections ?? []) {\n references.push({\n entryId: section.id,\n kind: 'section',\n markdown: section.markdown,\n json: section.json,\n });\n }\n for (const page of packManifest.pages ?? []) {\n references.push({\n entryId: page.id,\n kind: 'page',\n markdown: page.markdown,\n json: page.json,\n });\n }\n for (const mutation of packManifest.mutations ?? []) {\n references.push({\n entryId: mutation.id,\n kind: 'mutation',\n markdown: mutation.markdown,\n json: mutation.json,\n });\n }\n\n return references;\n}\n\nexport function collectMissingPackManifestFiles(\n projectRoot: string,\n packManifest: PackManifest | null = loadPackManifest(projectRoot),\n): MissingPackManifestFile[] {\n if (!packManifest) return [];\n\n const contextDir = join(projectRoot, '.decantr', 'context');\n const missing: MissingPackManifestFile[] = [];\n for (const reference of collectPackManifestReferences(packManifest)) {\n for (const field of ['markdown', 'json'] as const) {\n const fileName = reference[field];\n if (!fileName) continue;\n const absolutePath = join(contextDir, fileName);\n if (existsSync(absolutePath)) continue;\n missing.push({\n entryId: reference.entryId,\n kind: reference.kind,\n field,\n relativePath: `.decantr/context/${fileName}`,\n absolutePath,\n });\n }\n }\n\n return missing;\n}\n\nfunction readTextIfExists(path: string): string {\n try {\n return existsSync(path) ? readFileSync(path, 'utf-8') : '';\n } catch {\n return '';\n }\n}\n\nfunction readProjectAdoptionMode(projectRoot: string): string | null {\n const projectJson = readJsonIfExists<{\n initialized?: { adoptionMode?: unknown };\n }>(join(projectRoot, '.decantr', 'project.json'));\n const adoptionMode = projectJson?.initialized?.adoptionMode;\n return typeof adoptionMode === 'string' ? adoptionMode : null;\n}\n\nfunction createSourceAuditBucket(): SourceAuditBucket {\n return { count: 0, files: [] };\n}\n\nfunction recordSourceAudit(bucket: SourceAuditBucket, filePath: string, count: number): void {\n if (count <= 0) return;\n bucket.count += count;\n if (!bucket.files.includes(filePath) && bucket.files.length < 4) {\n bucket.files.push(filePath);\n }\n}\n\nfunction sourceAuditBucketsOverlap(a: SourceAuditBucket, b: SourceAuditBucket): boolean {\n return a.files.some((file) => b.files.includes(file));\n}\n\nfunction normalizeSourceAuditPath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\nfunction getNextAppLayoutGuardRoot(filePath: string): string | null {\n const normalized = normalizeSourceAuditPath(filePath);\n const match = normalized.match(\n /^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*([^/.()[\\]]+)\\/layout\\.[cm]?[jt]sx?$/i,\n );\n return match?.[1] ?? null;\n}\n\nfunction getNextAppRouteRoot(filePath: string): string | null {\n const normalized = normalizeSourceAuditPath(filePath);\n const match = normalized.match(/^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*([^/.()[\\]]+)(?:\\/|$)/i);\n return match?.[1] ?? null;\n}\n\nfunction getRouteRoot(route: string): string | null {\n const firstSegment = route.replace(/^\\/+/, '').split('/')[0];\n if (!firstSegment || firstSegment.startsWith(':') || firstSegment.startsWith('[')) {\n return null;\n }\n return firstSegment;\n}\n\nfunction isNextAppPublicChromeFile(filePath: string): boolean {\n const normalized = normalizeSourceAuditPath(filePath);\n return /^(?:src\\/)?app\\/(?:\\([^/]+\\)\\/)*(?:layout|nav|nav-header|navigation|header|footer|sidebar)\\.[cm]?[jt]sx?$/i.test(\n normalized,\n );\n}\n\nfunction sourceAuditProtectedSurfacesCoveredByGuardedNextLayouts(\n protectedSurfaces: SourceAuditBucket,\n authGuards: SourceAuditBucket,\n topology: TopologySummary,\n): boolean {\n const guardedRoots = new Set<string>();\n for (const file of authGuards.files) {\n const root = getNextAppLayoutGuardRoot(file);\n if (root) {\n guardedRoots.add(root);\n }\n }\n\n if (guardedRoots.size === 0 || protectedSurfaces.files.length === 0) {\n return false;\n }\n\n const guardedPrimaryRouteRoots = topology.primaryRoutes\n .map(getRouteRoot)\n .filter((root): root is string => Boolean(root))\n .filter((root) => guardedRoots.has(root));\n\n return protectedSurfaces.files.every((file) => {\n const appRoot = getNextAppRouteRoot(file);\n if (appRoot && guardedRoots.has(appRoot)) {\n return true;\n }\n return isNextAppPublicChromeFile(file) && guardedPrimaryRouteRoots.length > 0;\n });\n}\n\nfunction isAuditableSourceFile(filePath: string): boolean {\n if (/\\.d\\.ts$/i.test(filePath)) return false;\n return /\\.(?:[cm]?[jt]sx?)$/i.test(filePath);\n}\n\nfunction isNonProductionSourceAuditFile(filePath: string): boolean {\n const normalized = normalizeSourceAuditPath(filePath);\n return (\n /(?:^|\\/)(?:__tests__|__mocks__|tests?|specs?|fixtures?|mocks?|stories?)(?:\\/|$)/i.test(\n normalized,\n ) || /\\.(?:test|spec|stories|story|fixture|mock)\\.[cm]?[jt]sx?$/i.test(normalized)\n );\n}\n\nfunction collectProjectSourceFiles(projectRoot: string): string[] {\n const candidates = [\n 'src',\n 'app',\n 'pages',\n 'components',\n 'lib',\n 'utils',\n 'hooks',\n 'providers',\n 'server',\n ]\n .map((dir) => join(projectRoot, dir))\n .filter((dir) => existsSync(dir));\n const rootFileCandidates = [\n 'middleware.ts',\n 'middleware.tsx',\n 'middleware.js',\n 'middleware.jsx',\n 'middleware.mts',\n 'middleware.cts',\n 'proxy.ts',\n 'proxy.tsx',\n 'proxy.js',\n 'proxy.jsx',\n 'proxy.mts',\n 'proxy.cts',\n ]\n .map((file) => join(projectRoot, file))\n .filter((file) => existsSync(file));\n const files = new Set<string>();\n const ignoredDirNames = new Set([\n 'node_modules',\n '.git',\n '.decantr',\n 'dist',\n 'build',\n 'coverage',\n ]);\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (ignoredDirNames.has(entry.name)) continue;\n const absolutePath = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n if (!isAuditableSourceFile(absolutePath)) continue;\n files.add(absolutePath);\n }\n };\n\n for (const candidate of candidates) {\n walk(candidate);\n }\n\n for (const file of rootFileCandidates) {\n if (isAuditableSourceFile(file)) {\n files.add(file);\n }\n }\n\n return [...files].sort();\n}\n\nfunction buildSourceAuditEvidence(\n summary: SourceAuditSummary,\n bucket: SourceAuditBucket,\n label: string,\n): string[] {\n return [\n `Source files checked: ${summary.filesChecked}`,\n `${label}: ${bucket.count}`,\n `Affected files: ${bucket.files.join(', ')}`,\n ];\n}\n\nfunction isAuditableStyleFile(filePath: string): boolean {\n return /\\.css$/i.test(filePath);\n}\n\nfunction collectProjectStyleFiles(projectRoot: string): string[] {\n const candidates = ['src', 'app', 'styles']\n .map((dir) => join(projectRoot, dir))\n .filter((dir) => existsSync(dir));\n const files = new Set<string>();\n const ignoredDirNames = new Set([\n 'node_modules',\n '.git',\n '.decantr',\n 'dist',\n 'build',\n 'coverage',\n ]);\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (ignoredDirNames.has(entry.name)) continue;\n const absolutePath = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n if (!isAuditableStyleFile(absolutePath)) continue;\n files.add(absolutePath);\n }\n };\n\n for (const candidate of candidates) {\n walk(candidate);\n }\n\n return [...files].sort();\n}\n\nfunction countFocusVisibleSignals(code: string): number {\n const patterns = [/:focus-visible\\b/i, /\\.focus-visible\\b/i, /\\[data-focus-visible-added\\]/i];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countReducedMotionSignals(code: string): number {\n const patterns = [\n /@media\\s*\\(\\s*prefers-reduced-motion\\s*:\\s*reduce\\s*\\)/i,\n /\\[data-reduce-motion(?:=[^\\]]+)?\\]/i,\n /\\[data-motion(?:=[^\\]]*reduce[^\\]]*)\\]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\ninterface SourceAuditEntry {\n absolutePath: string;\n relativePath: string;\n code: string;\n}\n\nfunction hasModuleDirective(\n filePath: string,\n code: string,\n directive: 'use client' | 'use server',\n): boolean {\n const sourceFile = ts.createSourceFile(\n filePath,\n code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(filePath),\n );\n\n for (const statement of sourceFile.statements) {\n if (ts.isExpressionStatement(statement) && ts.isStringLiteralLike(statement.expression)) {\n if (statement.expression.text === directive) {\n return true;\n }\n continue;\n }\n break;\n }\n\n return false;\n}\n\nfunction importDeclarationHasRuntimeBinding(statement: ts.ImportDeclaration): boolean {\n const clause = statement.importClause;\n if (!clause) return true;\n if (clause.isTypeOnly) return false;\n if (clause.name) return true;\n if (!clause.namedBindings) return true;\n if (ts.isNamespaceImport(clause.namedBindings)) return true;\n return clause.namedBindings.elements.some((element) => !element.isTypeOnly);\n}\n\nfunction collectRuntimeImportSpecifiers(entry: SourceAuditEntry): string[] {\n const sourceFile = ts.createSourceFile(\n entry.relativePath,\n entry.code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(entry.relativePath),\n );\n const specifiers: string[] = [];\n\n for (const statement of sourceFile.statements) {\n if (\n ts.isImportDeclaration(statement) &&\n ts.isStringLiteralLike(statement.moduleSpecifier) &&\n importDeclarationHasRuntimeBinding(statement)\n ) {\n specifiers.push(statement.moduleSpecifier.text);\n }\n }\n\n return specifiers;\n}\n\nfunction resolveSourceImportTarget(\n projectRoot: string,\n sourceAbsolutePath: string,\n specifier: string,\n): string | null {\n let basePath: string | null = null;\n if (specifier.startsWith('@/')) {\n basePath = join(projectRoot, 'src', specifier.slice(2));\n } else if (specifier.startsWith('./') || specifier.startsWith('../')) {\n basePath = resolve(dirname(sourceAbsolutePath), specifier);\n }\n\n if (!basePath) return null;\n\n const candidates = [\n basePath,\n `${basePath}.ts`,\n `${basePath}.tsx`,\n `${basePath}.js`,\n `${basePath}.jsx`,\n `${basePath}.mts`,\n `${basePath}.cts`,\n join(basePath, 'index.ts'),\n join(basePath, 'index.tsx'),\n join(basePath, 'index.js'),\n join(basePath, 'index.jsx'),\n ];\n\n for (const candidate of candidates) {\n if (existsSync(candidate) && isAuditableSourceFile(candidate)) {\n return relative(projectRoot, candidate) || candidate;\n }\n }\n\n return null;\n}\n\nfunction collectClientReachableSourceFiles(\n projectRoot: string,\n entries: SourceAuditEntry[],\n): Set<string> {\n const entriesByRelativePath = new Map(entries.map((entry) => [entry.relativePath, entry]));\n const runtimeImportGraph = new Map<string, string[]>();\n\n for (const entry of entries) {\n const targets = collectRuntimeImportSpecifiers(entry)\n .map((specifier) => resolveSourceImportTarget(projectRoot, entry.absolutePath, specifier))\n .filter((target): target is string => Boolean(target));\n runtimeImportGraph.set(entry.relativePath, targets);\n }\n\n const reachable = new Set<string>();\n const queue = entries\n .filter((entry) => hasModuleDirective(entry.relativePath, entry.code, 'use client'))\n .map((entry) => entry.relativePath);\n\n for (const root of queue) {\n reachable.add(root);\n }\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n for (const target of runtimeImportGraph.get(current) ?? []) {\n const targetEntry = entriesByRelativePath.get(target);\n if (targetEntry && hasModuleDirective(target, targetEntry.code, 'use server')) {\n continue;\n }\n if (!reachable.has(target)) {\n reachable.add(target);\n queue.push(target);\n }\n }\n }\n\n return reachable;\n}\n\nfunction isClientAuthHeaderSource(\n relativePath: string,\n code: string,\n clientReachableFiles: Set<string>,\n): boolean {\n if (hasModuleDirective(relativePath, code, 'use server')) {\n return false;\n }\n if (clientReachableFiles.has(relativePath)) {\n return true;\n }\n\n const normalized = normalizeSourceAuditPath(relativePath);\n if (/^(?:src\\/)?app\\//i.test(normalized)) {\n return false;\n }\n\n return /(?:^|\\/)(?:components|routes|pages|hooks|providers)\\//i.test(normalized);\n}\n\nfunction auditProjectSourceTree(projectRoot: string): SourceAuditSummary {\n const sourceFiles = collectProjectSourceFiles(projectRoot);\n const sourceEntries = sourceFiles\n .map((sourceFile) => ({\n absolutePath: sourceFile,\n relativePath: relative(projectRoot, sourceFile) || sourceFile,\n code: readFileSync(sourceFile, 'utf-8'),\n }))\n .filter((entry) => !isNonProductionSourceAuditFile(entry.relativePath));\n const clientReachableFiles = collectClientReachableSourceFiles(projectRoot, sourceEntries);\n const summary: SourceAuditSummary = {\n filesChecked: sourceEntries.length,\n inlineStyles: createSourceAuditBucket(),\n componentStyleTags: createSourceAuditBucket(),\n localCssRuntimeSignals: createSourceAuditBucket(),\n securityRiskPatterns: createSourceAuditBucket(),\n localhostEndpointSignals: createSourceAuditBucket(),\n placeholderRoutes: createSourceAuditBucket(),\n commandPaletteSignals: createSourceAuditBucket(),\n keyboardShortcutSignals: createSourceAuditBucket(),\n protectedSurfaceSignals: createSourceAuditBucket(),\n authProtectedRedirectSignals: createSourceAuditBucket(),\n authAnonymousRedirectSignals: createSourceAuditBucket(),\n authOpenRedirectSignals: createSourceAuditBucket(),\n authExternalRedirectSignals: createSourceAuditBucket(),\n authProviderStateSignals: createSourceAuditBucket(),\n authProviderPkceSignals: createSourceAuditBucket(),\n authProviderNonceSignals: createSourceAuditBucket(),\n skipNavSignals: createSourceAuditBucket(),\n skipNavTargetIds: [],\n mainLandmarkSignals: createSourceAuditBucket(),\n mainLandmarkIds: [],\n authEntrySignals: createSourceAuditBucket(),\n signInFlowSignals: createSourceAuditBucket(),\n signUpFlowSignals: createSourceAuditBucket(),\n recoveryFlowSignals: createSourceAuditBucket(),\n authSessionSignals: createSourceAuditBucket(),\n authUnauthenticatedBranchSignals: createSourceAuditBucket(),\n authLoadingSignals: createSourceAuditBucket(),\n authProtectedLoadingRenderSignals: createSourceAuditBucket(),\n authBlankLoadingRenderSignals: createSourceAuditBucket(),\n authAnonymousLoadingRedirectSignals: createSourceAuditBucket(),\n authProtectedUnauthenticatedRenderSignals: createSourceAuditBucket(),\n authErrorSignals: createSourceAuditBucket(),\n authSuccessSignals: createSourceAuditBucket(),\n authCallbackTokenSignals: createSourceAuditBucket(),\n authCallbackExchangeSignals: createSourceAuditBucket(),\n authCallbackExchangeErrorSignals: createSourceAuditBucket(),\n authCallbackErrorSignals: createSourceAuditBucket(),\n authCallbackStateSignals: createSourceAuditBucket(),\n authCallbackStateValidationSignals: createSourceAuditBucket(),\n authCallbackStateStorageSignals: createSourceAuditBucket(),\n authCallbackStateStorageClearSignals: createSourceAuditBucket(),\n authCallbackUrlScrubSignals: createSourceAuditBucket(),\n authStorageWrites: createSourceAuditBucket(),\n authStorageClears: createSourceAuditBucket(),\n authCookieWrites: createSourceAuditBucket(),\n authCookieClears: createSourceAuditBucket(),\n authHeaderWrites: createSourceAuditBucket(),\n authHeaderClears: createSourceAuditBucket(),\n authCacheClients: createSourceAuditBucket(),\n authCacheClears: createSourceAuditBucket(),\n authRefreshSignals: createSourceAuditBucket(),\n authRefreshClears: createSourceAuditBucket(),\n authRealtimeSignals: createSourceAuditBucket(),\n authRealtimeClears: createSourceAuditBucket(),\n authCoordinationSignals: createSourceAuditBucket(),\n authCoordinationClears: createSourceAuditBucket(),\n authGuardSignals: createSourceAuditBucket(),\n authExitSignals: createSourceAuditBucket(),\n authSessionTeardownSignals: createSourceAuditBucket(),\n signInRouteSignals: createSourceAuditBucket(),\n registrationRouteSignals: createSourceAuditBucket(),\n recoveryRouteSignals: createSourceAuditBucket(),\n accessibilityIssues: createSourceAuditBucket(),\n interactionSafetyIssues: createSourceAuditBucket(),\n authInputHintIssues: createSourceAuditBucket(),\n };\n\n for (const { relativePath, code } of sourceEntries) {\n const signals = analyzeAstSignals(relativePath, code);\n const isClientAuthHeaderSourceFile = isClientAuthHeaderSource(\n relativePath,\n code,\n clientReachableFiles,\n );\n const accessibilityIssueCount =\n signals.iconOnlyButtonWithoutLabelCount +\n signals.iconOnlyLinkWithoutLabelCount +\n signals.clickableNonSemanticCount +\n signals.unlabeledNavigationLandmarkCount +\n signals.imageWithoutAltCount +\n signals.iframeWithoutTitleCount +\n signals.dialogWithoutLabelCount +\n signals.dialogWithoutModalHintCount +\n signals.tableWithoutHeaderCount +\n signals.tableWithoutCaptionCount +\n signals.formControlWithoutLabelCount;\n const securityRiskPatternCount =\n signals.dangerousHtmlCount +\n signals.rawHtmlInjectionCount +\n signals.dynamicEvalCount +\n signals.hardcodedSecretSignalCount +\n signals.clientSecretEnvReferenceCount +\n signals.localhostEndpointCount +\n signals.wildcardPostMessageCount +\n signals.windowOpenWithoutNoopenerCount +\n signals.externalIframeWithoutSandboxCount +\n signals.insecureExternalIframeCount +\n signals.insecureFormActionCount +\n signals.insecureAuthFormMethodCount +\n signals.insecureTransportEndpointCount +\n signals.insecureExternalImageCount +\n signals.authCookieMissingHardeningCount +\n signals.authOpenRedirectSignalCount +\n signals.authExternalRedirectSignalCount +\n signals.authProviderStateMissingCount +\n signals.authProviderPkceMissingCount +\n signals.authProviderNonceMissingCount +\n signals.externalBlankLinkWithoutRelCount;\n const authInputHintIssueCount =\n signals.emailAutocompleteMissingCount +\n signals.passwordAutocompleteMissingCount +\n signals.otpAutocompleteMissingCount +\n signals.authAutocompleteDisabledCount +\n signals.authAutocompleteSemanticMismatchCount +\n signals.authInputTypeMismatchCount;\n const localCssRuntimeCount =\n /(?:^|\\/)(?:lib|utils)\\/css\\.(?:[cm]?[jt]sx?)$/i.test(relativePath) ||\n /(?:^|\\/)styles\\/atoms\\.css$/i.test(relativePath) ||\n /Lightweight @decantr\\/css atom runtime/i.test(code)\n ? 1\n : 0;\n const componentStyleTagCount = countComponentStyleTagSignals(code);\n const commandPaletteSignalCount = countCommandPaletteSignals(code);\n const keyboardShortcutSignalCount = countKeyboardShortcutSignals(code);\n\n recordSourceAudit(summary.inlineStyles, relativePath, signals.inlineStyleAttributeCount);\n recordSourceAudit(summary.componentStyleTags, relativePath, componentStyleTagCount);\n recordSourceAudit(summary.localCssRuntimeSignals, relativePath, localCssRuntimeCount);\n recordSourceAudit(summary.securityRiskPatterns, relativePath, securityRiskPatternCount);\n recordSourceAudit(\n summary.localhostEndpointSignals,\n relativePath,\n signals.localhostEndpointCount,\n );\n recordSourceAudit(\n summary.placeholderRoutes,\n relativePath,\n signals.placeholderNavigationTargetCount,\n );\n recordSourceAudit(summary.commandPaletteSignals, relativePath, commandPaletteSignalCount);\n recordSourceAudit(summary.keyboardShortcutSignals, relativePath, keyboardShortcutSignalCount);\n recordSourceAudit(\n summary.protectedSurfaceSignals,\n relativePath,\n signals.protectedSurfaceSignalCount,\n );\n recordSourceAudit(\n summary.authProtectedRedirectSignals,\n relativePath,\n signals.authProtectedRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authAnonymousRedirectSignals,\n relativePath,\n signals.authAnonymousRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authOpenRedirectSignals,\n relativePath,\n signals.authOpenRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authExternalRedirectSignals,\n relativePath,\n signals.authExternalRedirectSignalCount,\n );\n recordSourceAudit(\n summary.authProviderStateSignals,\n relativePath,\n signals.authProviderStateMissingCount,\n );\n recordSourceAudit(\n summary.authProviderPkceSignals,\n relativePath,\n signals.authProviderPkceMissingCount,\n );\n recordSourceAudit(\n summary.authProviderNonceSignals,\n relativePath,\n signals.authProviderNonceMissingCount,\n );\n recordSourceAudit(summary.skipNavSignals, relativePath, signals.skipNavSignalCount);\n recordSourceAudit(summary.mainLandmarkSignals, relativePath, signals.mainLandmarkCount);\n for (const targetId of signals.skipNavTargetIds) {\n if (!summary.skipNavTargetIds.includes(targetId)) {\n summary.skipNavTargetIds.push(targetId);\n }\n }\n for (const landmarkId of signals.mainLandmarkIds) {\n if (!summary.mainLandmarkIds.includes(landmarkId)) {\n summary.mainLandmarkIds.push(landmarkId);\n }\n }\n recordSourceAudit(summary.authEntrySignals, relativePath, signals.authEntrySignalCount);\n recordSourceAudit(\n summary.signInFlowSignals,\n relativePath,\n countSignInFlowSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.signUpFlowSignals,\n relativePath,\n countSignUpFlowSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.recoveryFlowSignals,\n relativePath,\n countRecoveryFlowSignals(code, relativePath),\n );\n recordSourceAudit(summary.authSessionSignals, relativePath, signals.authSessionSignalCount);\n recordSourceAudit(\n summary.authUnauthenticatedBranchSignals,\n relativePath,\n countAuthUnauthenticatedBranchSignals(code),\n );\n recordSourceAudit(summary.authLoadingSignals, relativePath, signals.authLoadingSignalCount);\n recordSourceAudit(\n summary.authProtectedLoadingRenderSignals,\n relativePath,\n signals.authProtectedLoadingRenderCount,\n );\n recordSourceAudit(\n summary.authBlankLoadingRenderSignals,\n relativePath,\n signals.authBlankLoadingRenderCount,\n );\n recordSourceAudit(\n summary.authAnonymousLoadingRedirectSignals,\n relativePath,\n signals.authAnonymousLoadingRedirectCount,\n );\n recordSourceAudit(\n summary.authProtectedUnauthenticatedRenderSignals,\n relativePath,\n signals.authProtectedUnauthenticatedRenderCount,\n );\n recordSourceAudit(summary.authErrorSignals, relativePath, countAuthErrorSignals(code));\n recordSourceAudit(summary.authSuccessSignals, relativePath, countAuthSuccessSignals(code));\n recordSourceAudit(\n summary.authCallbackTokenSignals,\n relativePath,\n countAuthCallbackTokenSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.authCallbackExchangeSignals,\n relativePath,\n countAuthCallbackExchangeSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackExchangeErrorSignals,\n relativePath,\n countAuthCallbackExchangeErrorSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackErrorSignals,\n relativePath,\n countAuthCallbackErrorSignals(code, relativePath),\n );\n recordSourceAudit(\n summary.authCallbackStateSignals,\n relativePath,\n countAuthCallbackStateSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateValidationSignals,\n relativePath,\n countAuthCallbackStateValidationSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateStorageSignals,\n relativePath,\n countAuthCallbackStateStorageSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackStateStorageClearSignals,\n relativePath,\n countAuthCallbackStateStorageClearSignals(code),\n );\n recordSourceAudit(\n summary.authCallbackUrlScrubSignals,\n relativePath,\n countAuthCallbackUrlScrubSignals(code),\n );\n recordSourceAudit(summary.authStorageWrites, relativePath, signals.authStorageWriteCount);\n recordSourceAudit(summary.authStorageClears, relativePath, signals.authStorageClearCount);\n recordSourceAudit(summary.authCookieWrites, relativePath, signals.authCookieWriteCount);\n recordSourceAudit(summary.authCookieClears, relativePath, signals.authCookieClearCount);\n recordSourceAudit(\n summary.authHeaderWrites,\n relativePath,\n isClientAuthHeaderSourceFile ? signals.authHeaderWriteCount : 0,\n );\n recordSourceAudit(\n summary.authHeaderClears,\n relativePath,\n isClientAuthHeaderSourceFile ? signals.authHeaderClearCount : 0,\n );\n recordSourceAudit(summary.authCacheClients, relativePath, signals.authCacheClientCount);\n recordSourceAudit(summary.authCacheClears, relativePath, signals.authCacheClearCount);\n recordSourceAudit(summary.authRefreshSignals, relativePath, signals.authRefreshSignalCount);\n recordSourceAudit(summary.authRefreshClears, relativePath, signals.authRefreshClearCount);\n recordSourceAudit(summary.authRealtimeSignals, relativePath, countAuthRealtimeSignals(code));\n recordSourceAudit(\n summary.authRealtimeClears,\n relativePath,\n countAuthRealtimeClearSignals(code),\n );\n recordSourceAudit(\n summary.authCoordinationSignals,\n relativePath,\n countAuthCoordinationSignals(code),\n );\n recordSourceAudit(\n summary.authCoordinationClears,\n relativePath,\n countAuthCoordinationClearSignals(code),\n );\n recordSourceAudit(summary.authGuardSignals, relativePath, signals.authGuardSignalCount);\n recordSourceAudit(summary.authExitSignals, relativePath, signals.authExitSignalCount);\n recordSourceAudit(\n summary.authSessionTeardownSignals,\n relativePath,\n signals.authSessionTeardownSignalCount,\n );\n recordSourceAudit(summary.signInRouteSignals, relativePath, countSignInRouteSignals(code));\n recordSourceAudit(\n summary.registrationRouteSignals,\n relativePath,\n countRegistrationRouteSignals(code),\n );\n recordSourceAudit(\n summary.recoveryRouteSignals,\n relativePath,\n countAuthRecoveryRouteSignals(code),\n );\n recordSourceAudit(summary.accessibilityIssues, relativePath, accessibilityIssueCount);\n recordSourceAudit(\n summary.interactionSafetyIssues,\n relativePath,\n signals.buttonInFormWithoutTypeCount +\n signals.authFormWithoutSubmitCount +\n signals.authInputWithoutNameCount,\n );\n recordSourceAudit(summary.authInputHintIssues, relativePath, authInputHintIssueCount);\n }\n\n return summary;\n}\n\nfunction auditProjectStyleContracts(projectRoot: string): StyleAuditSummary {\n const styleFiles = collectProjectStyleFiles(projectRoot);\n const summary: StyleAuditSummary = {\n filesChecked: styleFiles.length,\n focusVisibleSignals: createSourceAuditBucket(),\n reducedMotionSignals: createSourceAuditBucket(),\n };\n\n for (const styleFile of styleFiles) {\n const relativePath = relative(projectRoot, styleFile) || styleFile;\n const css = readFileSync(styleFile, 'utf-8');\n recordSourceAudit(summary.focusVisibleSignals, relativePath, countFocusVisibleSignals(css));\n recordSourceAudit(summary.reducedMotionSignals, relativePath, countReducedMotionSignals(css));\n }\n\n return summary;\n}\n\nfunction buildRegistryContext(projectRoot: string): {\n themeRegistry: Map<string, { modes: string[] }>;\n patternRegistry: Map<string, unknown>;\n} {\n const themeRegistry = new Map<string, { modes: string[] }>();\n const patternRegistry = new Map<string, unknown>();\n const cacheDir = join(projectRoot, '.decantr', 'cache');\n const customDir = join(projectRoot, '.decantr', 'custom');\n\n const cachedThemesDir = join(cacheDir, '@official', 'themes');\n try {\n if (existsSync(cachedThemesDir)) {\n for (const file of readdirSync(cachedThemesDir).filter(\n (name) => name.endsWith('.json') && name !== 'index.json',\n )) {\n const data = JSON.parse(readFileSync(join(cachedThemesDir, file), 'utf-8')) as {\n id?: string;\n modes?: string[];\n };\n if (data.id && !themeRegistry.has(data.id)) {\n themeRegistry.set(data.id, { modes: data.modes || ['light', 'dark'] });\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n const customThemesDir = join(customDir, 'themes');\n try {\n if (existsSync(customThemesDir)) {\n for (const file of readdirSync(customThemesDir).filter((name) => name.endsWith('.json'))) {\n const data = JSON.parse(readFileSync(join(customThemesDir, file), 'utf-8')) as {\n id?: string;\n modes?: string[];\n };\n if (data.id) {\n themeRegistry.set(`custom:${data.id}`, { modes: data.modes || ['light', 'dark'] });\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n const cachedPatternsDir = join(cacheDir, '@official', 'patterns');\n try {\n if (existsSync(cachedPatternsDir)) {\n for (const file of readdirSync(cachedPatternsDir).filter(\n (name) => name.endsWith('.json') && name !== 'index.json',\n )) {\n const data = JSON.parse(readFileSync(join(cachedPatternsDir, file), 'utf-8')) as {\n id?: string;\n };\n if (data.id && !patternRegistry.has(data.id)) {\n patternRegistry.set(data.id, data);\n }\n }\n }\n } catch {\n /* best effort */\n }\n\n for (const id of ['content-section', 'footer', 'form-basic', 'hero', 'nav-header']) {\n if (!patternRegistry.has(id)) {\n patternRegistry.set(id, { id, source: 'bundled' });\n }\n }\n\n return { themeRegistry, patternRegistry };\n}\n\nfunction guardViolationToFinding(violation: GuardViolation): VerificationFinding {\n return {\n id: `guard-${violation.rule}`,\n category: violation.layer === 'dna' ? 'DNA Guard' : 'Blueprint Guard',\n severity: violation.severity === 'error' ? 'error' : 'warn',\n message: violation.message,\n evidence: [`Rule: ${violation.rule}`],\n rule: violation.rule,\n suggestedFix: violation.suggestion,\n };\n}\n\nfunction countPages(essence: EssenceFile | null): number {\n if (!essence) return 0;\n const blueprint = essence.blueprint as {\n pages?: unknown[];\n sections?: Array<{ pages?: unknown[] }>;\n };\n const sectionPages = Array.isArray(blueprint.sections)\n ? blueprint.sections.reduce(\n (sum, section) => sum + (Array.isArray(section.pages) ? section.pages.length : 0),\n 0,\n )\n : 0;\n const flatPages = Array.isArray(blueprint.pages) ? blueprint.pages.length : 0;\n return sectionPages + flatPages;\n}\n\ninterface TopologySummary {\n hasAuthFeature: boolean;\n sectionRoles: string[];\n gatewayRouteCount: number;\n primaryRouteCount: number;\n hasAnonymousEntryRoute: boolean;\n gatewayRoutes: string[];\n primaryRoutes: string[];\n}\n\ninterface SourceAuditBucket {\n count: number;\n files: string[];\n}\n\ninterface SourceAuditSummary {\n filesChecked: number;\n inlineStyles: SourceAuditBucket;\n componentStyleTags: SourceAuditBucket;\n localCssRuntimeSignals: SourceAuditBucket;\n securityRiskPatterns: SourceAuditBucket;\n localhostEndpointSignals: SourceAuditBucket;\n placeholderRoutes: SourceAuditBucket;\n commandPaletteSignals: SourceAuditBucket;\n keyboardShortcutSignals: SourceAuditBucket;\n protectedSurfaceSignals: SourceAuditBucket;\n authProtectedRedirectSignals: SourceAuditBucket;\n authAnonymousRedirectSignals: SourceAuditBucket;\n authOpenRedirectSignals: SourceAuditBucket;\n authExternalRedirectSignals: SourceAuditBucket;\n authProviderStateSignals: SourceAuditBucket;\n authProviderPkceSignals: SourceAuditBucket;\n authProviderNonceSignals: SourceAuditBucket;\n skipNavSignals: SourceAuditBucket;\n skipNavTargetIds: string[];\n mainLandmarkSignals: SourceAuditBucket;\n mainLandmarkIds: string[];\n authEntrySignals: SourceAuditBucket;\n signInFlowSignals: SourceAuditBucket;\n signUpFlowSignals: SourceAuditBucket;\n recoveryFlowSignals: SourceAuditBucket;\n authSessionSignals: SourceAuditBucket;\n authUnauthenticatedBranchSignals: SourceAuditBucket;\n authLoadingSignals: SourceAuditBucket;\n authProtectedLoadingRenderSignals: SourceAuditBucket;\n authBlankLoadingRenderSignals: SourceAuditBucket;\n authAnonymousLoadingRedirectSignals: SourceAuditBucket;\n authProtectedUnauthenticatedRenderSignals: SourceAuditBucket;\n authErrorSignals: SourceAuditBucket;\n authSuccessSignals: SourceAuditBucket;\n authCallbackTokenSignals: SourceAuditBucket;\n authCallbackExchangeSignals: SourceAuditBucket;\n authCallbackExchangeErrorSignals: SourceAuditBucket;\n authCallbackErrorSignals: SourceAuditBucket;\n authCallbackStateSignals: SourceAuditBucket;\n authCallbackStateValidationSignals: SourceAuditBucket;\n authCallbackStateStorageSignals: SourceAuditBucket;\n authCallbackStateStorageClearSignals: SourceAuditBucket;\n authCallbackUrlScrubSignals: SourceAuditBucket;\n authStorageWrites: SourceAuditBucket;\n authStorageClears: SourceAuditBucket;\n authCookieWrites: SourceAuditBucket;\n authCookieClears: SourceAuditBucket;\n authHeaderWrites: SourceAuditBucket;\n authHeaderClears: SourceAuditBucket;\n authCacheClients: SourceAuditBucket;\n authCacheClears: SourceAuditBucket;\n authRefreshSignals: SourceAuditBucket;\n authRefreshClears: SourceAuditBucket;\n authRealtimeSignals: SourceAuditBucket;\n authRealtimeClears: SourceAuditBucket;\n authCoordinationSignals: SourceAuditBucket;\n authCoordinationClears: SourceAuditBucket;\n authGuardSignals: SourceAuditBucket;\n authExitSignals: SourceAuditBucket;\n authSessionTeardownSignals: SourceAuditBucket;\n signInRouteSignals: SourceAuditBucket;\n registrationRouteSignals: SourceAuditBucket;\n recoveryRouteSignals: SourceAuditBucket;\n accessibilityIssues: SourceAuditBucket;\n interactionSafetyIssues: SourceAuditBucket;\n authInputHintIssues: SourceAuditBucket;\n}\n\ninterface StyleAuditSummary {\n filesChecked: number;\n focusVisibleSignals: SourceAuditBucket;\n reducedMotionSignals: SourceAuditBucket;\n}\n\nfunction makeFinding(input: VerificationFinding): VerificationFinding {\n return input;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_000_000) {\n return `${(bytes / 1_000_000).toFixed(2)} MB`;\n }\n if (bytes >= 1_000) {\n return `${Math.round(bytes / 1_000)} KB`;\n }\n return `${bytes} B`;\n}\n\nfunction normalizeRouteHint(route: string | null | undefined): string {\n if (!route || route === '/') return '/';\n const dynamicIndex = route.indexOf('/:');\n if (dynamicIndex !== -1) {\n return route.slice(0, dynamicIndex + 1);\n }\n return route;\n}\n\nfunction isAuthLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:auth|login|log-in|signin|sign-in|signup|sign-up|register|forgot-password|reset-password|password-reset)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction isRecoveryLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:forgot-password|reset-password|password-reset|recover|recovery)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction isSignInLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:auth|login|log-in|signin|sign-in)(?:\\/|$)/i.test(route);\n}\n\nfunction isRegistrationLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:signup|sign-up|register)(?:\\/|$)/i.test(route);\n}\n\nfunction isAnonymousEntryLikeRoute(route: string): boolean {\n return (\n route === '/' ||\n /(?:^|\\/)(?:auth|login|log-in|signin|sign-in|signup|sign-up|register)(?:\\/|$)/i.test(route)\n );\n}\n\nfunction isProtectedLikeRoute(route: string): boolean {\n return /(?:^|\\/)(?:app|dashboard|workspace|settings|billing|account|profile|admin|agents?|marketplace|browse|search|listings?|seller|buyer|bookings?|favorites|messages?|orders?|checkout|cart|transparency|logs?|metrics|config|console|studio|pipelines?|projects?|monitoring|overview)(?:\\/|$)/i.test(\n route,\n );\n}\n\nfunction essenceRequiresFocusVisible(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const accessibility = (dna as { accessibility?: unknown }).accessibility;\n if (!accessibility || typeof accessibility !== 'object') return false;\n return (accessibility as { focus_visible?: unknown }).focus_visible === true;\n}\n\nfunction essenceRequiresReducedMotion(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const motion = (dna as { motion?: unknown }).motion;\n if (!motion || typeof motion !== 'object') return false;\n return (motion as { reduce_motion?: unknown }).reduce_motion === true;\n}\n\nfunction essenceRequiresSkipNav(essence: EssenceFile | null): boolean {\n if (!essence || !('dna' in essence)) return false;\n const dna = (essence as { dna?: unknown }).dna;\n if (!dna || typeof dna !== 'object') return false;\n const accessibility = (dna as { accessibility?: unknown }).accessibility;\n if (!accessibility || typeof accessibility !== 'object') return false;\n return (accessibility as { skip_nav?: unknown }).skip_nav === true;\n}\n\nexport function extractRouteHintsFromEssence(essence: EssenceFile | null): string[] {\n if (!essence) {\n return ['/'];\n }\n\n const routes = new Set<string>(['/']);\n\n if (isV4(essence)) {\n for (const section of essence.blueprint.sections) {\n for (const page of section.pages) {\n if (typeof page.route === 'string' && page.route.length > 0) {\n routes.add(normalizeRouteHint(page.route));\n }\n }\n }\n\n if (essence.blueprint.routes && typeof essence.blueprint.routes === 'object') {\n for (const route of Object.keys(essence.blueprint.routes)) {\n routes.add(normalizeRouteHint(route));\n }\n }\n }\n\n return [...routes].filter(Boolean).slice(0, 8);\n}\n\nfunction summarizeTopology(\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n): TopologySummary {\n const features = new Set<string>(reviewPack?.data?.features ?? []);\n const sectionRoles = new Set<string>();\n const gatewayRoutes = new Set<string>();\n const primaryRoutes = new Set<string>();\n let gatewayRouteCount = 0;\n let primaryRouteCount = 0;\n let hasAnonymousEntryRoute = false;\n\n if (essence && isV4(essence)) {\n for (const feature of essence.blueprint.features ?? []) {\n if (typeof feature === 'string' && feature.length > 0) {\n features.add(feature);\n }\n }\n\n for (const section of essence.blueprint.sections ?? []) {\n const role =\n typeof section.role === 'string' && section.role.length > 0 ? section.role : 'unknown';\n sectionRoles.add(role);\n\n for (const page of section.pages ?? []) {\n if (typeof page.route !== 'string' || page.route.length === 0) continue;\n if (page.route === '/' && (role === 'public' || role === 'gateway')) {\n hasAnonymousEntryRoute = true;\n }\n if (role === 'gateway') {\n gatewayRouteCount += 1;\n gatewayRoutes.add(normalizeRouteHint(page.route));\n }\n if (role === 'primary') {\n primaryRouteCount += 1;\n primaryRoutes.add(normalizeRouteHint(page.route));\n }\n }\n }\n }\n\n return {\n hasAuthFeature: features.has('auth'),\n sectionRoles: [...sectionRoles],\n gatewayRouteCount,\n primaryRouteCount,\n hasAnonymousEntryRoute,\n gatewayRoutes: [...gatewayRoutes],\n primaryRoutes: [...primaryRoutes],\n };\n}\n\nfunction appendTopologyFindings(\n findings: VerificationFinding[],\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n): void {\n const topology = summarizeTopology(essence, reviewPack);\n if (!topology.hasAuthFeature) return;\n const overlappingAuthRoutes = topology.gatewayRoutes.filter((route) =>\n topology.primaryRoutes.includes(route),\n );\n\n if (!topology.sectionRoles.includes('gateway')) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-section-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but the essence topology does not define a gateway section.',\n evidence: [\n 'Expected a gateway section for login, registration, or recovery flows.',\n `Observed section roles: ${topology.sectionRoles.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add a gateway section for authentication flows so anonymous users have a clear entry path before protected routes.',\n }),\n );\n }\n\n if (!topology.sectionRoles.includes('primary')) {\n findings.push(\n makeFinding({\n id: 'auth-primary-section-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but no primary app section was found in the compiled topology.',\n evidence: [`Observed section roles: ${topology.sectionRoles.join(', ') || 'none'}`],\n suggestedFix:\n 'Add a primary section so authenticated users have a clear post-auth destination.',\n }),\n );\n }\n\n if (topology.sectionRoles.includes('gateway') && topology.gatewayRouteCount === 0) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-missing',\n category: 'Route Topology',\n severity: 'warn',\n message: 'A gateway section exists, but none of its pages declare explicit routes.',\n evidence: ['Gateway pages should expose routable login, registration, or recovery paths.'],\n suggestedFix:\n 'Give gateway pages explicit routes such as `/login`, `/register`, or `/forgot-password`.',\n }),\n );\n }\n\n if (topology.primaryRouteCount === 0) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-missing',\n category: 'Route Topology',\n severity: 'warn',\n message: 'Authentication is declared, but no primary section pages expose explicit routes.',\n evidence: [\n 'Protected app surfaces need explicit routes so post-auth entry points are unambiguous.',\n ],\n suggestedFix:\n 'Add explicit primary routes such as `/dashboard`, `/app`, `/browse`, or `/listings` for the authenticated experience.',\n }),\n );\n }\n\n if (\n topology.gatewayRoutes.length > 0 &&\n topology.gatewayRoutes.some((route) => route !== '/' && isProtectedLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-look-protected',\n category: 'Route Topology',\n severity: 'warn',\n message: 'Gateway routes include paths that look like authenticated app destinations.',\n evidence: [`Gateway routes: ${topology.gatewayRoutes.join(', ')}`],\n suggestedFix:\n 'Keep gateway routes focused on anonymous entry flows such as `/`, `/login`, `/register`, or `/forgot-password`, and move protected destinations into the primary section.',\n }),\n );\n }\n\n if (\n topology.gatewayRoutes.length > 0 &&\n topology.gatewayRoutes.every((route) => route !== '/' && !isAuthLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-routes-not-auth-like',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Gateway routes do not appear to expose anonymous entry or authentication-focused destinations.',\n evidence: [`Gateway routes: ${topology.gatewayRoutes.join(', ')}`],\n suggestedFix:\n 'Use gateway routes like `/`, `/login`, `/register`, or `/forgot-password` so the anonymous/auth entry surface is explicit.',\n }),\n );\n }\n\n if (\n topology.primaryRoutes.length > 0 &&\n topology.primaryRoutes.every((route) => isAuthLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-look-auth-only',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Primary routes only expose auth-like destinations and do not appear to include a post-auth application surface.',\n evidence: [`Primary routes: ${topology.primaryRoutes.join(', ')}`],\n suggestedFix:\n 'Keep login and registration routes in the gateway section, and add at least one primary app route such as `/dashboard`, `/workspace`, `/app`, `/browse`, or `/listings`.',\n }),\n );\n }\n\n if (\n topology.primaryRoutes.length > 0 &&\n topology.primaryRoutes.every((route) => !isProtectedLikeRoute(route))\n ) {\n findings.push(\n makeFinding({\n id: 'auth-primary-routes-not-app-like',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Primary routes do not appear to include a clear post-auth application destination.',\n evidence: [`Primary routes: ${topology.primaryRoutes.join(', ')}`],\n suggestedFix:\n 'Use at least one primary route like `/dashboard`, `/workspace`, `/settings`, `/app`, `/browse`, or `/listings` so the authenticated surface is explicit.',\n }),\n );\n }\n\n if (overlappingAuthRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'auth-gateway-primary-route-overlap',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Gateway and primary sections expose overlapping routes, which blurs the anonymous-to-authenticated boundary.',\n evidence: [`Overlapping routes: ${overlappingAuthRoutes.join(', ')}`],\n suggestedFix:\n 'Keep gateway routes focused on anonymous entry flows and reserve primary routes for authenticated destinations so the route boundary stays explicit.',\n }),\n );\n }\n\n if (!topology.hasAnonymousEntryRoute) {\n findings.push(\n makeFinding({\n id: 'auth-entry-route-missing',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Authentication is declared, but no public or gateway section exposes `/` as an anonymous entry route.',\n evidence: [\n 'Anonymous users should have a stable landing or auth entry route before protected navigation begins.',\n ],\n suggestedFix:\n 'Route `/` to a public landing page or gateway entry so the initial user journey is explicit.',\n }),\n );\n }\n}\n\nasync function runRuntimeAudit(\n projectRoot: string,\n essence: EssenceFile | null,\n): Promise<RuntimeAudit> {\n return auditBuiltDist(projectRoot, {\n routeHints: extractRouteHintsFromEssence(essence),\n });\n}\n\nfunction extractFailedRouteDocuments(runtimeAudit: RuntimeAudit): string[] {\n return runtimeAudit.failures\n .filter((failure) => failure.startsWith('route-document-failed:'))\n .map((failure) => normalizeRouteHint(failure.slice('route-document-failed:'.length)))\n .filter(Boolean);\n}\n\nfunction extractFailedRouteDocumentHardening(runtimeAudit: RuntimeAudit): string[] {\n return runtimeAudit.failures\n .filter((failure) => failure.startsWith('route-document-hardening-failed:'))\n .map((failure) => normalizeRouteHint(failure.slice('route-document-hardening-failed:'.length)))\n .filter(Boolean);\n}\n\nfunction appendRuntimeAuditFindings(\n findings: VerificationFinding[],\n runtimeAudit: RuntimeAudit,\n projectRoot: string,\n topology?: TopologySummary,\n sourceAudit?: SourceAuditSummary,\n): void {\n const distPath = join(projectRoot, 'dist');\n const indexPath = join(distPath, 'index.html');\n const isFrameworkBuildOutput = runtimeAudit.failures.includes('next-build-output');\n\n if (!runtimeAudit.distPresent) {\n findings.push(\n makeFinding({\n id: 'runtime-dist-missing',\n category: 'Runtime Verification',\n severity: 'info',\n message: 'No dist output was found, so runtime smoke verification was skipped.',\n evidence: [distPath],\n suggestedFix:\n 'Build the project before auditing if you want Decantr to verify root, asset, title, and route behavior.',\n }),\n );\n return;\n }\n\n if (!runtimeAudit.indexPresent) {\n findings.push(\n makeFinding({\n id: 'runtime-index-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'dist exists but index.html is missing, so runtime smoke verification could not run.',\n evidence: [indexPath],\n suggestedFix: 'Ensure the current build emits an index.html entry document.',\n }),\n );\n return;\n }\n\n if (runtimeAudit.rootDocumentOk === false && !isFrameworkBuildOutput) {\n findings.push(\n makeFinding({\n id: 'runtime-root-document-invalid',\n category: 'Runtime Verification',\n severity: 'error',\n message: 'The built root document did not expose the expected application mount point.',\n evidence: [indexPath, 'Expected to find an element with id=\"root\" in the served document.'],\n suggestedFix:\n 'Restore the framework mount element and confirm the built entry HTML matches the chosen runtime adapter.',\n }),\n );\n }\n\n if (runtimeAudit.titleOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-title-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing a non-empty <title>.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit a meaningful document title from the entry HTML or framework metadata layer.',\n }),\n );\n }\n\n if (runtimeAudit.langOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-lang-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing an explicit `lang` attribute on `<html>`.',\n evidence: [indexPath],\n suggestedFix:\n 'Set `<html lang=\"en\">` or the appropriate locale in the framework document shell so accessibility tooling and crawlers get the right language hint.',\n }),\n );\n }\n\n if (runtimeAudit.viewportOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-viewport-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'The built root document is missing a viewport meta tag.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">` from the entry document or metadata layer.',\n }),\n );\n }\n\n if (runtimeAudit.charsetOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-charset-missing',\n category: 'Document Hardening',\n severity: 'info',\n message: 'The built root document is missing an explicit charset declaration.',\n evidence: [indexPath],\n suggestedFix:\n 'Emit `<meta charset=\"utf-8\">` from the entry document so encoding expectations stay explicit across hosts.',\n }),\n );\n }\n\n if (runtimeAudit.inlineScriptCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-inline-scripts-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Inline `<script>` blocks were detected in the built root document.',\n evidence: [indexPath, `Inline script tags: ${runtimeAudit.inlineScriptCount}`],\n suggestedFix:\n 'Prefer bundled external assets and avoid inline scripts so CSP headers or nonces remain practical.',\n }),\n );\n }\n\n if (runtimeAudit.inlineEventHandlerCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-inline-event-handlers-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Inline DOM event handler attributes were detected in the built root document.',\n evidence: [\n indexPath,\n `Inline event handler attributes: ${runtimeAudit.inlineEventHandlerCount}`,\n ],\n suggestedFix:\n 'Remove inline `onclick`/`onload`-style handlers from built HTML and route behavior through the reviewed application bundle so CSP remains practical.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithoutIntegrityCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-without-integrity',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Remote script tags were detected without Subresource Integrity metadata.',\n evidence: [\n indexPath,\n `Remote scripts missing integrity: ${runtimeAudit.externalScriptsWithoutIntegrityCount}`,\n ],\n suggestedFix:\n 'Pin remote script tags with integrity/crossorigin metadata or serve the dependency through the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithIntegrityMissingCrossoriginCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-crossorigin-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Remote script tags declare Subresource Integrity without a matching `crossorigin` attribute.',\n evidence: [\n indexPath,\n `Remote scripts with integrity but missing crossorigin: ${runtimeAudit.externalScriptsWithIntegrityMissingCrossoriginCount}`,\n ],\n suggestedFix:\n 'Add a reviewed `crossorigin` attribute alongside script integrity metadata so SRI works consistently for remote script fetches.',\n }),\n );\n }\n\n if (runtimeAudit.externalScriptsWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-scripts-insecure-transport',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Remote script tags were detected over plain HTTP.',\n evidence: [\n indexPath,\n `Remote scripts over insecure transport: ${runtimeAudit.externalScriptsWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote scripts over HTTPS with integrity/crossorigin metadata, or move them into the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithoutIntegrityCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-without-integrity',\n category: 'Security Hygiene',\n severity: 'info',\n message: 'Remote stylesheet links were detected without Subresource Integrity metadata.',\n evidence: [\n indexPath,\n `Remote stylesheets missing integrity: ${runtimeAudit.externalStylesheetsWithoutIntegrityCount}`,\n ],\n suggestedFix:\n 'Pin remote stylesheet links with integrity/crossorigin metadata or serve the stylesheet through the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithIntegrityMissingCrossoriginCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-crossorigin-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Remote stylesheet links declare Subresource Integrity without a matching `crossorigin` attribute.',\n evidence: [\n indexPath,\n `Remote stylesheets with integrity but missing crossorigin: ${runtimeAudit.externalStylesheetsWithIntegrityMissingCrossoriginCount}`,\n ],\n suggestedFix:\n 'Add a reviewed `crossorigin` attribute alongside stylesheet integrity metadata so SRI works consistently for remote stylesheet fetches.',\n }),\n );\n }\n\n if (runtimeAudit.externalStylesheetsWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-stylesheets-insecure-transport',\n category: 'Security Hygiene',\n severity: 'info',\n message: 'Remote stylesheet links were detected over plain HTTP.',\n evidence: [\n indexPath,\n `Remote stylesheets over insecure transport: ${runtimeAudit.externalStylesheetsWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote stylesheets over HTTPS with integrity/crossorigin metadata, or move them into the trusted build pipeline.',\n }),\n );\n }\n\n if (runtimeAudit.externalMediaSourcesWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-media-insecure-transport',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Remote image or media sources were detected over plain HTTP in the built root document.',\n evidence: [\n indexPath,\n `Remote media sources over insecure transport: ${runtimeAudit.externalMediaSourcesWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve remote image and media sources over HTTPS or move them behind a reviewed trusted asset boundary before shipping.',\n }),\n );\n }\n\n if (runtimeAudit.externalBlankLinksWithoutRelCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-links-noopener-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'External links in the built root document open new tabs without `rel=\"noopener noreferrer\"` protections.',\n evidence: [\n indexPath,\n `External target=\"_blank\" links missing rel protections: ${runtimeAudit.externalBlankLinksWithoutRelCount}`,\n ],\n suggestedFix:\n 'Add `rel=\"noopener noreferrer\"` to built external links that open a new tab so opener access does not survive into production HTML.',\n }),\n );\n }\n\n if (runtimeAudit.externalIframesWithoutSandboxCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-iframes-sandbox-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'External iframe embeds in the built root document are missing a `sandbox` attribute.',\n evidence: [\n indexPath,\n `External iframes without sandbox: ${runtimeAudit.externalIframesWithoutSandboxCount}`,\n ],\n suggestedFix:\n 'Add the narrowest reviewed sandbox policy to external iframes before shipping built HTML.',\n }),\n );\n }\n\n if (runtimeAudit.externalIframesWithInsecureTransportCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-external-iframes-insecure-transport',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External iframe embeds in the built root document are loaded over plain HTTP.',\n evidence: [\n indexPath,\n `External iframes over insecure transport: ${runtimeAudit.externalIframesWithInsecureTransportCount}`,\n ],\n suggestedFix:\n 'Serve embedded iframes over HTTPS or move the integration behind a reviewed trusted boundary before shipping built HTML.',\n }),\n );\n }\n\n if (runtimeAudit.jsEvalSignalCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-js-dynamic-code-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes dynamic code execution markers such as `eval` or `new Function`.',\n evidence: [distPath, `Dynamic code signals in built JS: ${runtimeAudit.jsEvalSignalCount}`],\n suggestedFix:\n 'Remove runtime code evaluation from shipped bundles and replace it with explicit data transforms or static dispatch logic.',\n }),\n );\n }\n\n const hasSourceCorroboration = (sourceAudit?.filesChecked ?? 0) > 0;\n const sourceSecurityCorroborates = (sourceAudit?.securityRiskPatterns.count ?? 0) > 0;\n const sourceLocalhostCorroborates = (sourceAudit?.localhostEndpointSignals.count ?? 0) > 0;\n const htmlInjectionShouldWarn =\n runtimeAudit.jsHtmlInjectionSignalCount > 0 &&\n (!hasSourceCorroboration ||\n sourceSecurityCorroborates ||\n runtimeAudit.jsHtmlInjectionSignalCount >= 25);\n const insecureTransportShouldWarn =\n runtimeAudit.jsInsecureTransportSignalCount > 0 &&\n (!hasSourceCorroboration ||\n sourceSecurityCorroborates ||\n sourceLocalhostCorroborates ||\n runtimeAudit.jsInsecureTransportSignalCount >= 25);\n\n if (htmlInjectionShouldWarn) {\n findings.push(\n makeFinding({\n id: 'runtime-js-html-injection-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes HTML-injection markers such as `innerHTML`, `insertAdjacentHTML`, or `document.write`.',\n evidence: [\n distPath,\n `HTML injection signals in built JS: ${runtimeAudit.jsHtmlInjectionSignalCount}`,\n ],\n suggestedFix:\n 'Prefer explicit DOM node creation or framework-safe rendering paths instead of writing raw HTML into the document at runtime.',\n }),\n );\n }\n\n if (insecureTransportShouldWarn) {\n findings.push(\n makeFinding({\n id: 'runtime-js-insecure-transport-signals',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Built JavaScript includes insecure transport or localhost-style development endpoint markers.',\n evidence: [\n distPath,\n `Insecure or localhost transport signals in built JS: ${runtimeAudit.jsInsecureTransportSignalCount}`,\n ],\n suggestedFix:\n 'Remove plain HTTP, ws://, and localhost-style endpoints from shipped bundles; prefer HTTPS/WSS and reviewed environment-backed URLs or route transport through a trusted server boundary.',\n }),\n );\n }\n\n if (runtimeAudit.jsSecretSignalCount > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-js-secret-signals',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'Built JavaScript includes secret-like markers such as service-role keys, live secret keys, or private-key material.',\n evidence: [\n distPath,\n `Secret-like signals in built JS: ${runtimeAudit.jsSecretSignalCount}`,\n ],\n suggestedFix:\n 'Remove server-only secrets from client bundles immediately, rotate any exposed credentials, and keep privileged keys behind a trusted server boundary.',\n }),\n );\n }\n\n if (runtimeAudit.cspSignalOk === false) {\n findings.push(\n makeFinding({\n id: 'runtime-csp-signal-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'No document-level Content Security Policy signal was detected in the built root document.',\n evidence: [indexPath],\n suggestedFix:\n 'Prefer a CSP response header, or emit a CSP meta policy for static hosts that cannot add security headers.',\n }),\n );\n }\n\n if (runtimeAudit.assetCount === 0) {\n findings.push(\n makeFinding({\n id: 'runtime-assets-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message: 'No built /assets references were detected in dist/index.html.',\n evidence: [indexPath],\n suggestedFix:\n 'Confirm the production build emitted JS/CSS assets and that index.html points at them.',\n }),\n );\n } else if (runtimeAudit.assetsPassed < runtimeAudit.assetCount) {\n findings.push(\n makeFinding({\n id: 'runtime-assets-fetch-failed',\n category: 'Runtime Verification',\n severity: 'error',\n message: 'One or more built assets could not be fetched from the generated dist output.',\n evidence: [\n `${runtimeAudit.assetsPassed}/${runtimeAudit.assetCount} assets fetched successfully.`,\n ...runtimeAudit.failures.filter((failure) => failure.startsWith('asset-fetch-failed:')),\n ],\n suggestedFix:\n 'Rebuild the project and verify the emitted asset paths and static hosting layout are correct.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeHintsChecked.length > 0 &&\n runtimeAudit.routeHintsMatched < Math.min(2, runtimeAudit.routeHintsChecked.length)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-hints-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'Built JS did not clearly include the expected route hints from the compiled app contract.',\n evidence: [\n `Checked route hints: ${runtimeAudit.routeHintsChecked.join(', ')}`,\n `Matched ${runtimeAudit.routeHintsMatched}/${runtimeAudit.routeHintsChecked.length} route hints in built JS assets.`,\n ],\n suggestedFix:\n 'Verify that route generation still covers the pages declared in the essence and compiled packs.',\n }),\n );\n } else if (\n runtimeAudit.routeHintsChecked.length > 0 &&\n runtimeAudit.routeHintsMatched < runtimeAudit.routeHintsChecked.length\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-hints-partial',\n category: 'Runtime Verification',\n severity: 'info',\n message:\n 'Built JS only reflected part of the expected route contract from the compiled app context.',\n evidence: [\n `Checked route hints: ${runtimeAudit.routeHintsChecked.join(', ')}`,\n `Matched ${runtimeAudit.routeHintsMatched}/${runtimeAudit.routeHintsChecked.length} route hints in built JS assets.`,\n ],\n suggestedFix:\n 'Verify route generation for the missing pages and confirm code-split bundles still preserve the expected route contract.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsPassed < Math.min(2, runtimeAudit.routeDocumentsChecked)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-documents-missing',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more expected routes did not return a valid root document from the built output.',\n evidence: [\n `Passed ${runtimeAudit.routeDocumentsPassed}/${runtimeAudit.routeDocumentsChecked} route document checks.`,\n ...runtimeAudit.failures.filter((failure) =>\n failure.startsWith('route-document-failed:'),\n ),\n ],\n suggestedFix:\n 'Verify route fallbacks and build output so every declared route resolves to a usable root document.',\n }),\n );\n } else if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsPassed < runtimeAudit.routeDocumentsChecked\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-documents-partial',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'Some expected routes resolved to a root document, but at least one still failed runtime verification.',\n evidence: [\n `Passed ${runtimeAudit.routeDocumentsPassed}/${runtimeAudit.routeDocumentsChecked} route document checks.`,\n ...runtimeAudit.failures.filter((failure) =>\n failure.startsWith('route-document-failed:'),\n ),\n ],\n suggestedFix:\n 'Fix the failing route outputs so every declared destination resolves to the same usable root document contract.',\n }),\n );\n }\n\n if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsHardenedCount < Math.min(2, runtimeAudit.routeDocumentsChecked)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-document-hardening-missing',\n category: 'Document Hardening',\n severity: 'warn',\n message: 'Too few reviewed routes preserved a fully hardened document shell.',\n evidence: [\n `Hardened route documents: ${runtimeAudit.routeDocumentsHardenedCount}/${runtimeAudit.routeDocumentsChecked}`,\n ...extractFailedRouteDocumentHardening(runtimeAudit),\n ],\n suggestedFix:\n 'Keep title, lang, viewport, and charset metadata intact for every reviewed route document, not just the root entry shell.',\n }),\n );\n } else if (\n runtimeAudit.routeDocumentsChecked > 0 &&\n runtimeAudit.routeDocumentsHardenedCount < runtimeAudit.routeDocumentsChecked\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-route-document-hardening-partial',\n category: 'Document Hardening',\n severity: 'info',\n message:\n 'Some reviewed routes preserved a hardened document shell, but at least one still dropped critical document metadata.',\n evidence: [\n `Hardened route documents: ${runtimeAudit.routeDocumentsHardenedCount}/${runtimeAudit.routeDocumentsChecked}`,\n ...extractFailedRouteDocumentHardening(runtimeAudit),\n ],\n suggestedFix:\n 'Make sure every reviewed route document keeps title, lang, viewport, and charset metadata intact across route-level rendering.',\n }),\n );\n }\n\n if (topology?.hasAuthFeature) {\n const failedRouteDocuments = new Set(extractFailedRouteDocuments(runtimeAudit));\n const failedGatewayRoutes = topology.gatewayRoutes.filter((route) =>\n failedRouteDocuments.has(normalizeRouteHint(route)),\n );\n const failedPrimaryRoutes = topology.primaryRoutes.filter((route) =>\n failedRouteDocuments.has(normalizeRouteHint(route)),\n );\n\n if (failedGatewayRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-auth-gateway-routes-failed',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more gateway auth routes did not return a valid root document from the built output.',\n evidence: [\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Failed gateway routes: ${failedGatewayRoutes.join(', ')}`,\n ],\n suggestedFix:\n 'Ensure login, registration, and recovery routes resolve to the same usable root document contract as the rest of the app build.',\n }),\n );\n }\n\n if (failedPrimaryRoutes.length > 0) {\n findings.push(\n makeFinding({\n id: 'runtime-auth-primary-routes-failed',\n category: 'Runtime Verification',\n severity: 'warn',\n message:\n 'One or more primary authenticated routes did not return a valid root document from the built output.',\n evidence: [\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n `Failed primary routes: ${failedPrimaryRoutes.join(', ')}`,\n ],\n suggestedFix:\n 'Ensure authenticated app routes like `/dashboard` or `/app` survive the build output and resolve to a valid root document.',\n }),\n );\n }\n }\n\n const largestIsJs =\n typeof runtimeAudit.largestAssetPath === 'string' &&\n runtimeAudit.largestAssetPath.endsWith('.js');\n if (\n !isFrameworkBuildOutput &&\n ((largestIsJs &&\n runtimeAudit.largestAssetBytes > PERFORMANCE_BUDGETS.largestJsAssetWarnBytes) ||\n runtimeAudit.jsAssetBytes > PERFORMANCE_BUDGETS.totalJsWarnBytes)\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-js-bundle-large',\n category: 'Performance Budget',\n severity: 'warn',\n message:\n 'The built JavaScript output is larger than the current Decantr performance budget.',\n evidence: [\n `Total JS: ${formatBytes(runtimeAudit.jsAssetBytes)}`,\n `Largest asset: ${runtimeAudit.largestAssetPath ?? 'n/a'} (${formatBytes(runtimeAudit.largestAssetBytes)})`,\n ],\n suggestedFix:\n 'Split large route bundles, remove unnecessary client-only code, and prefer lighter patterns or deferred data surfaces.',\n }),\n );\n }\n\n if (\n !isFrameworkBuildOutput &&\n runtimeAudit.cssAssetBytes > PERFORMANCE_BUDGETS.totalCssWarnBytes\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-css-bundle-large',\n category: 'Performance Budget',\n severity: 'warn',\n message: 'The built CSS output is larger than the current Decantr performance budget.',\n evidence: [\n `Total CSS: ${formatBytes(runtimeAudit.cssAssetBytes)}`,\n `Total assets: ${formatBytes(runtimeAudit.totalAssetBytes)}`,\n ],\n suggestedFix:\n 'Trim unused treatment layers, reduce generated CSS duplication, and prefer scoped styles over broad utility carryover.',\n }),\n );\n }\n\n if (\n !isFrameworkBuildOutput &&\n runtimeAudit.totalAssetBytes > PERFORMANCE_BUDGETS.totalAssetsWarnBytes\n ) {\n findings.push(\n makeFinding({\n id: 'runtime-total-assets-large',\n category: 'Performance Budget',\n severity: 'warn',\n message: 'The built asset payload is larger than the current Decantr total asset budget.',\n evidence: [\n `Total assets: ${formatBytes(runtimeAudit.totalAssetBytes)}`,\n `JS: ${formatBytes(runtimeAudit.jsAssetBytes)}`,\n `CSS: ${formatBytes(runtimeAudit.cssAssetBytes)}`,\n ],\n suggestedFix:\n 'Reduce shipped assets, split infrequently used routes, and keep the showcase/app shell focused on essential interactive surfaces.',\n }),\n );\n }\n}\n\nfunction appendSourceAuditFindings(\n findings: VerificationFinding[],\n sourceAudit: SourceAuditSummary,\n essence: EssenceFile | null,\n reviewPack: ReviewExecutionPack | null,\n adoptionMode: string | null,\n): void {\n if (sourceAudit.filesChecked === 0) {\n return;\n }\n\n const isContractOnly = adoptionMode === 'contract-only';\n\n if (sourceAudit.inlineStyles.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-inline-styles-present',\n category: 'Source Audit',\n severity: 'warn',\n message: isContractOnly\n ? 'Source files contain inline style attributes; contract-only projects should route static visual decisions through project-owned styling law.'\n : 'Source files still contain disallowed inline style attributes, which undermines the compiled treatment contract.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.inlineStyles,\n 'Disallowed inline style attributes',\n ),\n suggestedFix: isContractOnly\n ? 'Move static visual styling into the app design system, Tailwind/theme tokens, component variants, or accepted local rules. Keep inline style only for truly dynamic geometry.'\n : 'Move static visual styling into treatments, atoms, or design-token-backed classes. Inline style remains acceptable for Decantr CSS-variable writes and truly dynamic geometry.',\n }),\n );\n }\n\n if (sourceAudit.componentStyleTags.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-component-style-tags-present',\n category: 'Source Audit',\n severity: 'warn',\n message: isContractOnly\n ? 'Source files inject component-scoped style tags or dynamic style elements, which makes project-owned styling rules harder to enforce.'\n : 'Source files inject component-scoped style tags or dynamic style elements, which bypass the compiled Decantr layer contract.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.componentStyleTags,\n 'Component-level style tag signals',\n ),\n suggestedFix: isContractOnly\n ? 'Move shared keyframes, media queries, and visual rules into the project stylesheet, component library, or accepted local pattern/rule manifest.'\n : 'Move shared keyframes, media queries, and visual rules into global.css or treatments.css so styling stays inside the reviewed Decantr layer stack.',\n }),\n );\n }\n\n if (!isContractOnly && sourceAudit.localCssRuntimeSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-local-css-runtime-stub-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files include a local css() runtime or hand-written atoms stylesheet instead of the first-party `@decantr/css` runtime path.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.localCssRuntimeSignals,\n 'Local css() runtime signals',\n ),\n suggestedFix:\n 'Use the real `@decantr/css` runtime for atom classes and remove local `css()` stubs or hand-written `atoms.css` fallbacks unless the project is deliberately running in an explicit fallback mode.',\n }),\n );\n }\n\n if (sourceAudit.securityRiskPatterns.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-security-risk-patterns-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files include security-risk rendering or link patterns before the project is even built.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.securityRiskPatterns,\n 'Security-risk source patterns',\n ),\n suggestedFix:\n 'Remove dangerous HTML writes, client-exposed secret references, localhost/dev endpoints, wildcard postMessage targets, dynamic code execution, and unsafe external link patterns from source before shipping.',\n }),\n );\n }\n\n if (sourceAudit.localhostEndpointSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-localhost-endpoints-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files still reference localhost-style endpoints that will not survive a real production deployment.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.localhostEndpointSignals,\n 'Localhost endpoint signals',\n ),\n suggestedFix:\n 'Replace localhost, 127.0.0.1, or 0.0.0.0 client endpoints with reviewed environment-backed URLs or route them behind a trusted server boundary before shipping.',\n }),\n );\n }\n\n if (sourceAudit.placeholderRoutes.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-placeholder-route-targets-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files still include placeholder navigation targets instead of real app routes.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.placeholderRoutes,\n 'Placeholder route targets',\n ),\n suggestedFix:\n 'Replace placeholder href/to values with the actual routes declared in the compiled packs and essence.',\n }),\n );\n }\n\n const navigation = essence && isV4(essence) ? essence.meta.navigation : null;\n if (navigation?.command_palette && sourceAudit.commandPaletteSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-command-palette-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence declares a command palette, but the source tree does not show an obvious command-palette implementation signal.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Command palette declared in essence navigation.',\n ],\n suggestedFix:\n 'Implement a real command palette surface with its keyboard trigger instead of merely acknowledging the feature in copy or comments.',\n }),\n );\n }\n\n if (navigation?.hotkeys?.length && sourceAudit.keyboardShortcutSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-hotkeys-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence declares hotkeys, but the source tree does not show obvious keyboard-shortcut handling.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Hotkeys declared: ${navigation.hotkeys.length}`,\n ],\n suggestedFix:\n 'Implement the declared hotkeys with real keydown handlers or a reviewed shortcut helper rather than leaving them as documentation-only features.',\n }),\n );\n }\n\n if (sourceAudit.authStorageWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-storage-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files write auth-like credentials into browser storage.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authStorageWrites,\n 'Auth storage writes',\n ),\n suggestedFix:\n 'Avoid storing auth tokens in localStorage/sessionStorage and prefer secure server-managed session boundaries.',\n }),\n );\n }\n\n if (sourceAudit.authCookieWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-cookie-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files write auth-like credentials into client-managed cookies.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authCookieWrites,\n 'Auth cookie writes',\n ),\n suggestedFix:\n 'Avoid setting auth cookies from client-side JavaScript; prefer secure server-issued HttpOnly session cookies or other server-managed boundaries.',\n }),\n );\n }\n\n if (sourceAudit.authHeaderWrites.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-header-writes-present',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files construct auth-like authorization headers in client-side code.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authHeaderWrites,\n 'Auth header writes',\n ),\n suggestedFix:\n 'Avoid building bearer/session auth headers in client-rendered code; prefer server-managed session boundaries or a deliberate reviewed client-auth strategy.',\n }),\n );\n }\n\n const topology = summarizeTopology(essence, reviewPack);\n if (\n topology.hasAuthFeature &&\n sourceAudit.authStorageWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authStorageClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-storage-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth storage being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth storage write files: ${sourceAudit.authStorageWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth storage clear files: none',\n ],\n suggestedFix:\n 'If auth data is ever stored in browser storage, remove those auth/session keys during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCookieWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authCookieClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-cookie-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth cookies being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth cookie write files: ${sourceAudit.authCookieWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth cookie clear files: none',\n ],\n suggestedFix:\n 'If auth cookies are issued from reviewed source surfaces, explicitly expire or delete them during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authHeaderWrites.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authHeaderClears.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-header-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-managed auth headers being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth header write files: ${sourceAudit.authHeaderWrites.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth header clear files: none',\n ],\n suggestedFix:\n 'If reviewed source code constructs auth-like authorization headers, explicitly delete or reset those header values during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCacheClients.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n sourceAudit.authCacheClears.count === 0 &&\n (sourceAuditBucketsOverlap(sourceAudit.authCacheClients, sourceAudit.protectedSurfaceSignals) ||\n sourceAuditBucketsOverlap(sourceAudit.authCacheClients, sourceAudit.authSessionSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-cache-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show client-side data caches being cleared during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth cache client files: ${sourceAudit.authCacheClients.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n 'Auth cache clear files: none',\n ],\n suggestedFix:\n 'If protected data is cached in query clients or client data stores, clear or reset those caches during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authRefreshSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authRefreshSignals, sourceAudit.authRefreshClears)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-refresh-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show background auth refresh timers or subscriptions being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth refresh files: ${sourceAudit.authRefreshSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth refresh clear files: ${sourceAudit.authRefreshClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If auth/session refresh runs on timers or subscriptions, clear those intervals, timeouts, or listeners during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authRealtimeSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authRealtimeSignals, sourceAudit.authRealtimeClears) &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authRealtimeSignals,\n sourceAudit.protectedSurfaceSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authRealtimeSignals, sourceAudit.authSessionSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-realtime-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show realtime channels or sockets being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth realtime files: ${sourceAudit.authRealtimeSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth realtime clear files: ${sourceAudit.authRealtimeClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If protected data arrives over websockets, SSE, or realtime channels, close or unsubscribe those connections during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCoordinationSignals.count > 0 &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.authCoordinationClears,\n ) &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.protectedSurfaceSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authCoordinationSignals,\n sourceAudit.authSessionSignals,\n ))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-coordination-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth exit flows exist, but the source tree does not show cross-tab auth coordination channels or storage listeners being torn down during sign-out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth coordination files: ${sourceAudit.authCoordinationSignals.files.join(', ') || 'none'}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Auth coordination clear files: ${sourceAudit.authCoordinationClears.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'If auth state is coordinated across tabs with BroadcastChannel or storage listeners, close those channels and remove those listeners during sign-out before returning users to an anonymous route.',\n }),\n );\n }\n\n if (topology.hasAuthFeature && sourceAudit.authGuardSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-guard-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared, but the source tree does not show clear auth-guard or redirect behavior.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth guard signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add explicit protected-route wrappers, middleware, session checks, or redirects to login/register before authenticated surfaces render.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.primaryRoutes.length > 0 &&\n sourceAudit.protectedSurfaceSignals.count > 0 &&\n sourceAudit.authGuardSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.protectedSurfaceSignals, sourceAudit.authGuardSignals) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.protectedSurfaceSignals,\n sourceAudit.authSessionSignals,\n ) &&\n !sourceAuditProtectedSurfacesCoveredByGuardedNextLayouts(\n sourceAudit.protectedSurfaceSignals,\n sourceAudit.authGuardSignals,\n topology,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-protected-surface-auth-checks-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Files that expose protected app surfaces do not appear to co-locate session checks or guard behavior.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected surface files: ${sourceAudit.protectedSurfaceSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n `Auth session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Keep protected-route components, layouts, or loaders close to the session check or guard that protects them so authenticated surfaces do not look accidentally public.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProtectedRedirectSignals.count > 0 &&\n sourceAuditBucketsOverlap(\n sourceAudit.authProtectedRedirectSignals,\n sourceAudit.authGuardSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authProtectedRedirectSignals,\n sourceAudit.authEntrySignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-guard-protected-redirect',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth guard logic appears to redirect users toward protected destinations instead of anonymous entry routes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected redirect files: ${sourceAudit.authProtectedRedirectSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Send unauthenticated guard redirects to `/`, `/login`, `/register`, or another reviewed gateway route, and keep redirects to protected destinations for post-auth success flows only.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Source files reference auth/session state but do not show a clear loading or pending state while session resolution happens.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth/session signals: ${sourceAudit.authSessionSignals.count}`,\n `Auth loading signals: ${sourceAudit.authLoadingSignals.count}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When auth or session state resolves asynchronously, render an explicit loading, skeleton, suspense fallback, or pending state before redirecting or rendering protected content.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authProtectedLoadingRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-protected-render',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces show a loading branch, but that branch still appears to render a protected destination while session resolution is pending.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Protected loading render files: ${sourceAudit.authProtectedLoadingRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'While auth/session state is loading, render a neutral spinner, skeleton, suspense fallback, or guard boundary instead of returning a dashboard/app shell before the session is confirmed.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authBlankLoadingRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-blank-render',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth/session loading branches exist, but some of them return nothing instead of an explicit pending boundary.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Blank loading files: ${sourceAudit.authBlankLoadingRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When auth/session state is loading, render a spinner, skeleton, suspense fallback, or another explicit pending UI instead of returning `null` or an empty fragment.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authSessionSignals.count > 0 &&\n sourceAuditBucketsOverlap(sourceAudit.authSessionSignals, sourceAudit.authLoadingSignals) &&\n sourceAudit.authAnonymousLoadingRedirectSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-loading-anonymous-redirect',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth/session loading branches redirect users to anonymous routes before session resolution finishes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Loading files: ${sourceAudit.authLoadingSignals.files.join(', ') || 'none'}`,\n `Anonymous loading redirect files: ${sourceAudit.authAnonymousLoadingRedirectSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Do not redirect to `/login`, `/`, or another anonymous route while session state is still loading. Render a pending boundary first, then redirect only after the session resolves as unauthenticated.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n ) &&\n sourceAudit.authProtectedUnauthenticatedRenderSignals.count > 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-protected-render',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces branch on auth loss but still appear to render a protected destination in the unauthenticated branch.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Protected unauthenticated render files: ${sourceAudit.authProtectedUnauthenticatedRenderSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect to a reviewed anonymous route or render a neutral guard boundary instead of returning a dashboard/app shell.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-handling-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces read auth/session state but do not show an explicit unauthenticated branch when session resolution fails or the user signs out.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Auth guard files: ${sourceAudit.authGuardSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When protected surfaces read session state directly, branch on unauthenticated/null-session cases and redirect to a reviewed anonymous route or return a guard boundary before protected content renders.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.protectedSurfaceSignals,\n ) &&\n sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authUnauthenticatedBranchSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authSessionSignals,\n sourceAudit.authAnonymousRedirectSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-session-loss-redirect-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Protected source surfaces branch on auth loss but do not show an obvious redirect back to an anonymous route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Protected session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Unauthenticated branch files: ${sourceAudit.authUnauthenticatedBranchSignals.files.join(', ') || 'none'}`,\n `Anonymous redirect files: ${sourceAudit.authAnonymousRedirectSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect users to `/`, `/login`, `/register`, or another reviewed anonymous route instead of returning `null` or leaving the protected shell blank.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authSessionSignals.count > 0 || sourceAudit.authEntrySignals.count > 0) &&\n sourceAudit.authErrorSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-error-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication surfaces do not show an obvious error or failure state for rejected sign-in, session refresh, or recovery flows.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth/session signals: ${sourceAudit.authSessionSignals.count}`,\n `Auth entry signals: ${sourceAudit.authEntrySignals.count}`,\n 'Auth error signals: 0',\n `Session files: ${sourceAudit.authSessionSignals.files.join(', ') || 'none'}`,\n `Entry files: ${sourceAudit.authEntrySignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Expose a reviewed error state for failed sign-in, session refresh, or recovery paths with inline feedback, alert messaging, or another explicit failure affordance.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.recoveryFlowSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.recoveryFlowSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-recovery-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Recovery flows exist, but the source tree does not show an obvious success or confirmation state after a reset request completes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Recovery flow signals: ${sourceAudit.recoveryFlowSignals.count}`,\n 'Auth success signals: 0',\n `Recovery files: ${sourceAudit.recoveryFlowSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After password-reset or recovery submission succeeds, show a reviewed confirmation state such as \"check your email\", \"reset link sent\", or another explicit success affordance.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.signUpFlowSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.signUpFlowSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(sourceAudit.signUpFlowSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-registration-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Registration flows exist, but the source tree does not show either a reviewed post-auth transition or an explicit success/verification state.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Registration flow signals: ${sourceAudit.signUpFlowSignals.count}`,\n `Protected auth redirects: ${sourceAudit.authProtectedRedirectSignals.count}`,\n `Auth success signals: ${sourceAudit.authSuccessSignals.count}`,\n `Registration files: ${sourceAudit.signUpFlowSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After registration succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state such as \"account created\" or \"check your email\" before the next auth step.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackStateSignals.count > 0) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authSuccessSignals,\n ) &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateSignals,\n sourceAudit.authProtectedRedirectSignals,\n ) &&\n !sourceAuditBucketsOverlap(sourceAudit.authCallbackStateSignals, sourceAudit.authSuccessSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-success-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback handling exists, but the source tree does not show either a reviewed protected transition or an explicit success state after callback exchange completes.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth callback token files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Auth callback state files: ${sourceAudit.authCallbackStateSignals.files.join(', ') || 'none'}`,\n `Protected auth redirects: ${sourceAudit.authProtectedRedirectSignals.count}`,\n `Auth success signals: ${sourceAudit.authSuccessSignals.count}`,\n ],\n suggestedFix:\n 'After callback validation or code exchange succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success/verification state before the next auth step.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackExchangeSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackExchangeSignals,\n sourceAudit.authCallbackExchangeErrorSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-exchange-error-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback exchange logic exists, but the source tree does not show explicit failure handling if the code/session exchange rejects.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth callback exchange files: ${sourceAudit.authCallbackExchangeSignals.files.join(', ') || 'none'}`,\n `Callback exchange error-handling files: ${sourceAudit.authCallbackExchangeErrorSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Wrap callback code/session exchange in reviewed catch handling or explicit exchange-error state so failed callback completion does not strand users on an indefinite pending path.',\n }),\n );\n }\n\n if (topology.hasAuthFeature && sourceAudit.authExitSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-signals-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication is declared, but the source tree does not show an obvious sign-out or session-exit path.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth exit signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Expose an explicit sign-out/logout flow so authenticated users can intentionally end their session.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.hasAnonymousEntryRoute &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authExitSignals,\n sourceAudit.authAnonymousRedirectSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-redirect-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication exit flows do not show an obvious redirect back to an anonymous entry route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Anonymous redirect files: ${sourceAudit.authAnonymousRedirectSignals.files.join(', ') || 'none'}`,\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After sign-out or session exit, redirect users back to `/`, `/login`, `/register`, or another reviewed anonymous entry route so protected shells do not linger after logout.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authExitSignals.count > 0 &&\n !sourceAuditBucketsOverlap(sourceAudit.authExitSignals, sourceAudit.authSessionTeardownSignals)\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-exit-teardown-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication exit flows exist, but the source tree does not show an obvious session teardown or sign-out boundary.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth exit files: ${sourceAudit.authExitSignals.files.join(', ') || 'none'}`,\n `Session teardown files: ${sourceAudit.authSessionTeardownSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Before redirecting users out of the protected shell, explicitly sign out or invalidate the reviewed session state instead of relying on navigation alone.',\n }),\n );\n }\n\n if (sourceAudit.authOpenRedirectSignals.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-open-redirect-risk',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files appear to trust next/returnTo-style redirect parameters during auth or route-transition flows.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authOpenRedirectSignals,\n 'Auth/query redirect signals',\n ),\n suggestedFix:\n 'Resolve post-auth or route-transition redirects through a reviewed allowlist of internal routes instead of redirecting directly from raw `next`, `returnTo`, `callbackUrl`, or similar query parameters.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authExternalRedirectSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authExternalRedirectSignals,\n sourceAudit.authExitSignals,\n ))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-external-redirect-risk',\n category: 'Source Audit',\n severity: 'warn',\n message: 'Source files appear to redirect auth-related flows directly to external URLs.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authExternalRedirectSignals,\n 'Auth external redirects',\n ),\n suggestedFix:\n 'Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration instead of hardcoding off-site destinations in app code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderStateSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderStateSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderStateSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-state-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style auth authorize URLs without a `state` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderStateSignals,\n 'Auth provider URLs missing state',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL, include a reviewed `state` value and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderPkceSignals.count > 0 &&\n (sourceAuditBucketsOverlap(sourceAudit.authProviderPkceSignals, sourceAudit.authEntrySignals) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderPkceSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderPkceSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-pkce-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style OAuth code-flow URLs without a `code_challenge` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderPkceSignals,\n 'Auth provider code flows missing PKCE',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL with `response_type=code`, include a reviewed PKCE `code_challenge` and verifier instead of hardcoding a bare code flow from client code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authProviderNonceSignals.count > 0 &&\n (sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.authEntrySignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.signInFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.signUpFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(\n sourceAudit.authProviderNonceSignals,\n sourceAudit.recoveryFlowSignals,\n ) ||\n sourceAuditBucketsOverlap(sourceAudit.authProviderNonceSignals, sourceAudit.authExitSignals))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-provider-nonce-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files hardcode provider-style OIDC id_token URLs without a `nonce` parameter.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authProviderNonceSignals,\n 'Auth provider id_token flows missing nonce',\n ),\n suggestedFix:\n 'When auth flows hand off to an external provider authorize URL that requests `id_token`, include a reviewed `nonce` and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.length === 0 &&\n sourceAudit.authEntrySignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-entry-surface-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared, but the source tree does not show any obvious login, registration, or credential-entry surface.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth entry signals: 0',\n 'Gateway routes: none',\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add an explicit login, registration, recovery, or reviewed SSO entry surface before protected routes become the primary way into the app.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.length > 0 &&\n sourceAudit.authEntrySignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-entry-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Authentication is declared and gateway routes exist, but the source tree does not show an obvious sign-in, registration, or credential-entry surface.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Auth entry signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Add a real login, registration, or recovery surface with credential inputs or explicit auth entry actions on the gateway routes.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isRecoveryLikeRoute(route)) &&\n sourceAudit.signInFlowSignals.count > 0 &&\n sourceAudit.recoveryRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-recovery-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Sign-in surfaces exist and a recovery route is declared, but the source tree does not show an obvious path into that recovery flow.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-in flow files: ${sourceAudit.signInFlowSignals.files.join(', ') || 'none'}`,\n 'Recovery route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link sign-in users to the declared recovery route, such as `/forgot-password` or `/reset-password`, somewhere in the reviewed auth entry surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isRegistrationLikeRoute(route)) &&\n sourceAudit.signInFlowSignals.count > 0 &&\n sourceAudit.registrationRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-registration-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Sign-in surfaces exist and a registration route is declared, but the source tree does not show an obvious path into that registration flow.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-in flow files: ${sourceAudit.signInFlowSignals.files.join(', ') || 'none'}`,\n 'Registration route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link sign-in users to the declared registration route, such as `/register` or `/sign-up`, somewhere in the reviewed auth entry surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isSignInLikeRoute(route)) &&\n (sourceAudit.signUpFlowSignals.count > 0 || sourceAudit.recoveryFlowSignals.count > 0) &&\n sourceAudit.signInRouteSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-signin-route-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Registration or recovery surfaces exist and a sign-in route is declared, but the source tree does not show an obvious path back into sign-in.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Sign-up flow files: ${sourceAudit.signUpFlowSignals.files.join(', ') || 'none'}`,\n `Recovery flow files: ${sourceAudit.recoveryFlowSignals.files.join(', ') || 'none'}`,\n 'Sign-in route signals: 0',\n `Gateway routes: ${topology.gatewayRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Link registration and recovery users back to the declared sign-in route, such as `/login` or `/sign-in`, somewhere in the reviewed gateway surfaces.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.primaryRoutes.length > 0 &&\n (sourceAudit.signInFlowSignals.count > 0 ||\n (sourceAudit.authEntrySignals.count > 0 &&\n sourceAudit.signUpFlowSignals.count === 0 &&\n sourceAudit.recoveryFlowSignals.count === 0)) &&\n sourceAudit.authProtectedRedirectSignals.count === 0 &&\n sourceAudit.authSuccessSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-success-redirect-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Authentication entry surfaces exist, but the source tree does not show an obvious transition into the protected app after success.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Auth entry signals: ${sourceAudit.authEntrySignals.count}`,\n 'Protected auth redirects: 0',\n `Primary routes: ${topology.primaryRoutes.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After reviewed sign-in, registration, or recovery success, route users into a primary app surface such as `/dashboard`, `/app`, or another protected destination instead of leaving the post-auth transition implicit.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackTokenSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackTokenSignals,\n sourceAudit.authCallbackErrorSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-error-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback code appears to read provider return data without an obvious failure state for provider-denied or callback error returns.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback token signal files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Callback error-handling signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed auth callback routes can receive provider error returns, branch on `error` or related callback params and show a reviewed failure state before or alongside the post-auth redirect handling.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackStateSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateSignals,\n sourceAudit.authCallbackStateValidationSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-state-validation-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback code reads provider `state` on return but does not show an obvious validation step against a reviewed expected value.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback state signal files: ${sourceAudit.authCallbackStateSignals.files.join(', ') || 'none'}`,\n `Callback state-validation signal files: ${sourceAudit.authCallbackStateValidationSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed auth callback routes read a returned `state`, compare it against a stored or expected reviewed value before exchanging callback codes or continuing session setup.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n sourceAudit.authCallbackStateValidationSignals.count > 0 &&\n sourceAudit.authCallbackStateStorageSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackStateStorageSignals,\n sourceAudit.authCallbackStateStorageClearSignals,\n )\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-state-teardown-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback code appears to validate stored callback `state` but does not show that the stored state key is cleared afterwards.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback state-storage signal files: ${sourceAudit.authCallbackStateStorageSignals.files.join(', ') || 'none'}`,\n `Callback state-clear signal files: ${sourceAudit.authCallbackStateStorageClearSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'After validating returned callback `state`, remove the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n topology.gatewayRoutes.some((route) => isSignInLikeRoute(route)) &&\n (((sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackStateSignals.count > 0) &&\n sourceAudit.authCallbackErrorSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackErrorSignals,\n sourceAudit.signInRouteSignals,\n )) ||\n (sourceAudit.authCallbackExchangeSignals.count > 0 &&\n sourceAudit.authCallbackExchangeErrorSignals.count > 0 &&\n !sourceAuditBucketsOverlap(\n sourceAudit.authCallbackExchangeErrorSignals,\n sourceAudit.signInRouteSignals,\n )))\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-entry-return-missing',\n category: 'Source Audit',\n severity: 'info',\n message:\n 'Auth callback failure handling exists, but the source tree does not show an obvious path back to the declared sign-in route.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback error-handling signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n `Callback exchange error-handling files: ${sourceAudit.authCallbackExchangeErrorSignals.files.join(', ') || 'none'}`,\n `Sign-in route signal files: ${sourceAudit.signInRouteSignals.files.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'When reviewed callback handling or callback session exchange fails, link or redirect users back to the declared sign-in route, such as `/login` or `/sign-in`, instead of leaving the callback failure state isolated.',\n }),\n );\n }\n\n if (\n topology.hasAuthFeature &&\n (sourceAudit.authCallbackTokenSignals.count > 0 ||\n sourceAudit.authCallbackErrorSignals.count > 0) &&\n sourceAudit.authCallbackUrlScrubSignals.count === 0\n ) {\n findings.push(\n makeFinding({\n id: 'source-auth-callback-url-scrub-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Auth callback code appears to read tokens, codes, or provider error params from the URL without scrubbing them back out of browser history.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Callback token signal files: ${sourceAudit.authCallbackTokenSignals.files.join(', ') || 'none'}`,\n `Callback error signal files: ${sourceAudit.authCallbackErrorSignals.files.join(', ') || 'none'}`,\n 'Callback URL scrub signals: 0',\n ],\n suggestedFix:\n 'After consuming auth callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n }),\n );\n }\n\n if (sourceAudit.accessibilityIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-accessibility-issues-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files contain unlabeled or non-semantic interactive patterns that should be fixed before runtime verification.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.accessibilityIssues,\n 'Accessibility labeling issues',\n ),\n suggestedFix:\n 'Add explicit labels, semantic interactive elements, and missing alt text so accessibility issues do not accumulate across generated screens.',\n }),\n );\n }\n\n if (essenceRequiresSkipNav(essence) && sourceAudit.skipNavSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-skip-nav-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence contract requires skip navigation, but the source tree does not show a skip-link signal.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Skip-nav requirement: true',\n 'Skip-nav signals: 0',\n ],\n suggestedFix:\n 'Add a visible-on-focus skip link such as `Skip to content` that targets the main app landmark before shipping the accessible surface.',\n }),\n );\n }\n\n if (essenceRequiresSkipNav(essence) && sourceAudit.mainLandmarkSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'source-main-landmark-signals-missing',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'The essence contract requires skip navigation, but the source tree does not show a main landmark for skip-link targeting.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n 'Skip-nav requirement: true',\n 'Main landmark signals: 0',\n ],\n suggestedFix:\n 'Add a `<main>` landmark or a container with `role=\"main\"` so skip navigation lands on a clear primary app region.',\n }),\n );\n }\n\n if (\n essenceRequiresSkipNav(essence) &&\n sourceAudit.skipNavTargetIds.length > 0 &&\n !sourceAudit.skipNavTargetIds.some((targetId) => sourceAudit.mainLandmarkIds.includes(targetId))\n ) {\n findings.push(\n makeFinding({\n id: 'source-skip-nav-target-mismatch',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Skip-link targets do not line up with any detected main landmark id in the source tree.',\n evidence: [\n `Source files checked: ${sourceAudit.filesChecked}`,\n `Skip-nav targets: ${sourceAudit.skipNavTargetIds.join(', ')}`,\n `Main landmark ids: ${sourceAudit.mainLandmarkIds.join(', ') || 'none'}`,\n ],\n suggestedFix:\n 'Point skip-link href values at the id of the primary `<main>` landmark, or add a matching id to the existing main region.',\n }),\n );\n }\n\n if (sourceAudit.interactionSafetyIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-interaction-safety-issues-present',\n category: 'Source Audit',\n severity: 'warn',\n message:\n 'Source files contain interaction patterns that can trigger accidental submissions or unsafe form behavior.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.interactionSafetyIssues,\n 'Interaction safety issues',\n ),\n suggestedFix:\n 'Give form buttons explicit types so interactive controls do exactly what the compiled task contract intends.',\n }),\n );\n }\n\n if (sourceAudit.authInputHintIssues.count > 0) {\n findings.push(\n makeFinding({\n id: 'source-auth-input-hints-missing',\n category: 'Source Audit',\n severity: 'info',\n message: 'Source auth flows are missing explicit autocomplete hints on credential inputs.',\n evidence: buildSourceAuditEvidence(\n sourceAudit,\n sourceAudit.authInputHintIssues,\n 'Missing auth autocomplete hints',\n ),\n suggestedFix:\n 'Add explicit autocomplete values such as `email`, `username`, `current-password`, or `new-password` before auth flows ship.',\n }),\n );\n }\n}\n\nfunction appendStyleContractFindings(\n findings: VerificationFinding[],\n styleAudit: StyleAuditSummary,\n essence: EssenceFile | null,\n): void {\n if (essenceRequiresFocusVisible(essence) && styleAudit.focusVisibleSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'style-focus-visible-signals-missing',\n category: 'Style Contract',\n severity: 'warn',\n message:\n 'The essence contract requires visible focus treatment, but the project styles do not show a focus-visible signal.',\n evidence: [\n `Style files checked: ${styleAudit.filesChecked}`,\n 'Focus-visible requirement: true',\n 'Focus-visible signals: 0',\n ],\n suggestedFix:\n 'Add a clear `:focus-visible` treatment in the project CSS so keyboard focus remains visible across interactive surfaces.',\n }),\n );\n }\n\n if (essenceRequiresReducedMotion(essence) && styleAudit.reducedMotionSignals.count === 0) {\n findings.push(\n makeFinding({\n id: 'style-reduced-motion-signals-missing',\n category: 'Style Contract',\n severity: 'info',\n message:\n 'The essence contract requires reduced-motion support, but the project styles do not show a reduced-motion signal.',\n evidence: [\n `Style files checked: ${styleAudit.filesChecked}`,\n 'Reduced-motion requirement: true',\n 'Reduced-motion signals: 0',\n ],\n suggestedFix:\n 'Add a `prefers-reduced-motion: reduce` style path or an equivalent reviewed reduce-motion contract so motion-heavy surfaces can soften or disable non-essential animation.',\n }),\n );\n }\n}\n\nexport async function auditProject(projectRoot: string): Promise<ProjectAuditReport> {\n const essencePath = join(projectRoot, 'decantr.essence.json');\n const findings: VerificationFinding[] = [];\n const reviewPack = loadReviewPack(projectRoot);\n const packManifest = loadPackManifest(projectRoot);\n const adoptionMode = readProjectAdoptionMode(projectRoot);\n const packHydrationOptional = adoptionMode === 'contract-only';\n const packHydrationSeverity: VerificationSeverity = packHydrationOptional ? 'info' : 'warn';\n const runtimeAudit = emptyRuntimeAudit();\n\n if (!existsSync(essencePath)) {\n findings.push(\n makeFinding({\n id: 'essence-missing',\n category: 'Project Contract',\n severity: 'error',\n message: 'No decantr.essence.json file was found.',\n evidence: [essencePath],\n suggestedFix: 'Run `decantr init` or scaffold the project again so the essence exists.',\n }),\n );\n\n return {\n $schema: VERIFICATION_SCHEMA_URLS.projectAudit,\n projectRoot,\n valid: false,\n essence: null,\n reviewPack,\n packManifest,\n runtimeAudit,\n findings,\n summary: {\n errorCount: 1,\n warnCount: 0,\n infoCount: 0,\n essenceVersion: null,\n reviewPackPresent: Boolean(reviewPack),\n packManifestPresent: Boolean(packManifest),\n runtimeAuditChecked: false,\n runtimePassed: null,\n pageCount: 0,\n },\n };\n }\n\n let essence: EssenceFile | null = null;\n try {\n essence = JSON.parse(readFileSync(essencePath, 'utf-8')) as EssenceFile;\n } catch (error) {\n findings.push(\n makeFinding({\n id: 'essence-parse-error',\n category: 'Project Contract',\n severity: 'error',\n message: `Failed to parse decantr.essence.json: ${(error as Error).message}`,\n evidence: [essencePath],\n suggestedFix: 'Repair the essence JSON before auditing the project.',\n }),\n );\n }\n\n if (essence) {\n const validation = validateEssence(essence);\n if (!validation.valid) {\n for (const issue of validation.errors) {\n findings.push(\n makeFinding({\n id: 'essence-validation',\n category: 'Schema Validation',\n severity: 'error',\n message: issue,\n evidence: [essencePath],\n suggestedFix: 'Resolve the schema violation and rerun `decantr validate`.',\n }),\n );\n }\n } else {\n const { themeRegistry, patternRegistry } = buildRegistryContext(projectRoot);\n for (const violation of evaluateGuard(essence, { themeRegistry, patternRegistry })) {\n findings.push(guardViolationToFinding(violation));\n }\n }\n }\n\n appendTopologyFindings(findings, essence, reviewPack);\n\n if (!packManifest) {\n findings.push(\n makeFinding({\n id: 'pack-manifest-missing',\n category: 'Execution Packs',\n severity: packHydrationSeverity,\n message: packHydrationOptional\n ? 'Compiled execution pack manifest is not hydrated yet; this is optional for contract-only Brownfield adoption.'\n : 'Compiled execution pack manifest is missing.',\n evidence: [join(projectRoot, '.decantr', 'context', 'pack-manifest.json')],\n suggestedFix: packHydrationOptional\n ? 'Optional: run `decantr registry compile-packs decantr.essence.json --write-context` when you want hosted page packs and review packs for richer assistant context.'\n : 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate scaffold, review, mutation, section, and page packs.',\n }),\n );\n } else {\n const missingPackFiles = collectMissingPackManifestFiles(projectRoot, packManifest);\n if (missingPackFiles.length > 0) {\n findings.push(\n makeFinding({\n id: 'pack-manifest-referenced-files-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'The compiled execution pack manifest references files that are missing.',\n evidence: missingPackFiles\n .slice(0, 12)\n .map(\n (missing) =>\n `${missing.kind}:${missing.entryId}:${missing.field} -> ${missing.relativePath}`,\n ),\n suggestedFix:\n 'Regenerate or hydrate the full execution pack bundle so every file named by pack-manifest.json exists beside it.',\n }),\n );\n }\n if (!packManifest.scaffold) {\n findings.push(\n makeFinding({\n id: 'scaffold-pack-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'Compiled scaffold pack is missing from the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix: 'Regenerate the context bundle with `decantr refresh`.',\n }),\n );\n }\n if (!packManifest.review) {\n findings.push(\n makeFinding({\n id: 'review-pack-missing',\n category: 'Execution Packs',\n severity: 'warn',\n message: 'Compiled review pack is missing from the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix:\n 'Regenerate the context bundle so critique tasks have a compiled review contract.',\n }),\n );\n }\n if ((packManifest.mutations ?? []).length === 0) {\n findings.push(\n makeFinding({\n id: 'mutation-packs-missing',\n category: 'Execution Packs',\n severity: 'info',\n message: 'No mutation packs were found in the manifest.',\n evidence: ['pack-manifest.json'],\n suggestedFix:\n 'Run `decantr registry compile-packs decantr.essence.json --write-context` to hydrate mutation task packs.',\n }),\n );\n }\n }\n\n if (!reviewPack) {\n findings.push(\n makeFinding({\n id: 'review-pack-file-missing',\n category: 'Review Contract',\n severity: packHydrationSeverity,\n message: packHydrationOptional\n ? 'The compiled review pack file is not hydrated yet; contract-only Brownfield projects can continue without it.'\n : 'The compiled review pack file is missing.',\n evidence: [join(projectRoot, '.decantr', 'context', 'review-pack.json')],\n suggestedFix: packHydrationOptional\n ? 'Optional: hydrate hosted packs later if you want critique consumers to anchor findings to the compiled review contract.'\n : 'Hydrate the full hosted context bundle with `decantr registry compile-packs decantr.essence.json --write-context` so critique consumers can anchor findings to the compiled review contract.',\n }),\n );\n }\n\n const sourceAudit = auditProjectSourceTree(projectRoot);\n const styleAudit = auditProjectStyleContracts(projectRoot);\n const checkedRuntimeAudit = await runRuntimeAudit(projectRoot, essence);\n appendRuntimeAuditFindings(\n findings,\n checkedRuntimeAudit,\n projectRoot,\n summarizeTopology(essence, reviewPack),\n sourceAudit,\n );\n appendSourceAuditFindings(findings, sourceAudit, essence, reviewPack, adoptionMode);\n appendStyleContractFindings(findings, styleAudit, essence);\n\n const summary = {\n errorCount: findings.filter((finding) => finding.severity === 'error').length,\n warnCount: findings.filter((finding) => finding.severity === 'warn').length,\n infoCount: findings.filter((finding) => finding.severity === 'info').length,\n essenceVersion: essence ? String(essence.version) : null,\n reviewPackPresent: Boolean(reviewPack),\n packManifestPresent: Boolean(packManifest),\n runtimeAuditChecked: checkedRuntimeAudit.checked,\n runtimePassed: checkedRuntimeAudit.passed,\n pageCount: countPages(essence),\n };\n\n return {\n $schema: VERIFICATION_SCHEMA_URLS.projectAudit,\n projectRoot,\n valid: summary.errorCount === 0,\n essence,\n reviewPack,\n packManifest,\n runtimeAudit: checkedRuntimeAudit,\n findings,\n summary,\n };\n}\n\nfunction buildDecoratorInventory(treatmentsCss: string): string[] {\n const decoratorNames = new Set<string>();\n\n for (\n let index = treatmentsCss.indexOf('.');\n index !== -1;\n index = treatmentsCss.indexOf('.', index + 1)\n ) {\n let cursor = index + 1;\n while (cursor < treatmentsCss.length && isCssClassNameChar(treatmentsCss[cursor]!)) {\n cursor += 1;\n }\n if (cursor === index + 1) continue;\n\n const name = treatmentsCss.slice(index + 1, cursor);\n let whitespaceCursor = cursor;\n while (\n whitespaceCursor < treatmentsCss.length &&\n whitespaceCursor - cursor <= 64 &&\n isCssWhitespace(treatmentsCss[whitespaceCursor]!)\n ) {\n whitespaceCursor += 1;\n }\n\n if (treatmentsCss[whitespaceCursor] === '{') {\n decoratorNames.add(name);\n }\n }\n\n return [...decoratorNames].filter(\n (name) => !name.startsWith('d-') && !PERSONALITY_UTILS.includes(name),\n );\n}\n\nfunction isCssClassNameChar(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n char === '_' ||\n char === '-' ||\n (codePoint >= 48 && codePoint <= 57) ||\n (codePoint >= 65 && codePoint <= 90) ||\n (codePoint >= 97 && codePoint <= 122)\n );\n}\n\nfunction isCssWhitespace(char: string): boolean {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r' || char === '\\f';\n}\n\nfunction resolveFocusAreas(reviewPack: ReviewExecutionPack | null): string[] {\n return reviewPack?.data?.focusAreas?.length ? reviewPack.data.focusAreas : DEFAULT_FOCUS_AREAS;\n}\n\nfunction resolveSeverityFromChecks(\n reviewPack: ReviewExecutionPack | null,\n fallback: VerificationSeverity,\n checkIds: string[],\n): VerificationSeverity {\n const match = reviewPack?.successChecks?.find((check) => checkIds.includes(check.id));\n return match?.severity ?? fallback;\n}\n\nfunction findHardcodedColors(code: string): string[] {\n const matches = [\n ...findHexColors(code),\n ...findColorFunctionCalls(code, 'rgb('),\n ...findColorFunctionCalls(code, 'rgba('),\n ...findColorFunctionCalls(code, 'hsl('),\n ...findColorFunctionCalls(code, 'hsla('),\n ];\n return [...new Set(matches)];\n}\n\nfunction findHexColors(code: string): string[] {\n const matches: string[] = [];\n\n for (let index = 0; index < code.length; index += 1) {\n if (code[index] !== '#') continue;\n\n let cursor = index + 1;\n while (cursor < code.length && cursor - index <= 8 && isHexDigit(code[cursor]!)) {\n cursor += 1;\n }\n\n const length = cursor - index - 1;\n if (length >= 3 && length <= 8 && !isHexDigit(code[cursor] ?? '')) {\n matches.push(code.slice(index, cursor));\n }\n }\n\n return matches;\n}\n\nfunction findColorFunctionCalls(code: string, functionName: string): string[] {\n const matches: string[] = [];\n const lowerCode = code.toLowerCase();\n\n for (\n let index = lowerCode.indexOf(functionName);\n index !== -1;\n index = lowerCode.indexOf(functionName, index + functionName.length)\n ) {\n let cursor = index + functionName.length;\n const maxCursor = Math.min(code.length, cursor + 256);\n while (\n cursor < maxCursor &&\n code[cursor] !== ')' &&\n code[cursor] !== '\\n' &&\n code[cursor] !== '\\r'\n ) {\n cursor += 1;\n }\n if (code[cursor] === ')') {\n matches.push(code.slice(index, cursor + 1));\n }\n }\n\n return matches;\n}\n\nfunction isHexDigit(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n (codePoint >= 48 && codePoint <= 57) ||\n (codePoint >= 65 && codePoint <= 70) ||\n (codePoint >= 97 && codePoint <= 102)\n );\n}\n\nfunction findUtilityFrameworkSignals(code: string): string[] {\n const matches =\n code.match(\n /\\b(?:bg|text|border|shadow|rounded|px|py|mx|my|gap|grid-cols|col-span|row-span|sm|md|lg|xl|hover):[-\\w/.[\\]]+/g,\n ) ?? [];\n return [...new Set(matches)];\n}\n\nfunction countComponentStyleTagSignals(code: string): number {\n const jsxStyleTags = code.match(/<style(?:\\s|>)/gi)?.length ?? 0;\n const dynamicStyleElements = code.match(/document\\.createElement\\((['\"])style\\1\\)/g)?.length ?? 0;\n return jsxStyleTags + dynamicStyleElements;\n}\n\nfunction countCommandPaletteSignals(code: string): number {\n const matches =\n code.match(\n /\\b(?:commandpalette|command palette|cmd\\+k|⌘k|openCommandPalette|setCommandPaletteOpen|paletteOpen|paletteTrigger)\\b/gi,\n ) ?? [];\n return matches.length;\n}\n\nfunction countKeyboardShortcutSignals(code: string): number {\n const matches =\n code.match(/\\b(?:keydown|keyup|metaKey|ctrlKey|altKey|shiftKey|hotkey|shortcut)\\b/gi) ?? [];\n return matches.length;\n}\n\ninterface AstCritiqueSignals {\n inlineStyleAttributeCount: number;\n dangerousHtmlCount: number;\n rawHtmlInjectionCount: number;\n dynamicEvalCount: number;\n hardcodedSecretSignalCount: number;\n clientSecretEnvReferenceCount: number;\n localhostEndpointCount: number;\n wildcardPostMessageCount: number;\n windowOpenWithoutNoopenerCount: number;\n messageListenerWithoutOriginCheckCount: number;\n externalIframeWithoutSandboxCount: number;\n insecureExternalIframeCount: number;\n insecureFormActionCount: number;\n insecureAuthFormMethodCount: number;\n insecureTransportEndpointCount: number;\n iconOnlyButtonWithoutLabelCount: number;\n iconOnlyLinkWithoutLabelCount: number;\n clickableNonSemanticCount: number;\n imageWithoutAltCount: number;\n insecureExternalImageCount: number;\n iframeWithoutTitleCount: number;\n dialogWithoutLabelCount: number;\n dialogWithoutModalHintCount: number;\n tableWithoutHeaderCount: number;\n tableWithoutCaptionCount: number;\n unlabeledNavigationLandmarkCount: number;\n multipleMainLandmarkCount: number;\n externalBlankLinkWithoutRelCount: number;\n formControlWithoutLabelCount: number;\n placeholderNavigationTargetCount: number;\n protectedSurfaceSignalCount: number;\n skipNavSignalCount: number;\n skipNavTargetIds: string[];\n mainLandmarkCount: number;\n mainLandmarkIds: string[];\n emailAutocompleteMissingCount: number;\n passwordAutocompleteMissingCount: number;\n otpAutocompleteMissingCount: number;\n authAutocompleteDisabledCount: number;\n authAutocompleteSemanticMismatchCount: number;\n authInputTypeMismatchCount: number;\n authInputWithoutNameCount: number;\n buttonInFormWithoutTypeCount: number;\n authFormWithoutSubmitCount: number;\n authEntrySignalCount: number;\n authSessionSignalCount: number;\n authLoadingSignalCount: number;\n authProtectedLoadingRenderCount: number;\n authBlankLoadingRenderCount: number;\n authAnonymousLoadingRedirectCount: number;\n authProtectedUnauthenticatedRenderCount: number;\n authProtectedRedirectSignalCount: number;\n authAnonymousRedirectSignalCount: number;\n authOpenRedirectSignalCount: number;\n authExternalRedirectSignalCount: number;\n authProviderStateMissingCount: number;\n authProviderPkceMissingCount: number;\n authProviderNonceMissingCount: number;\n authStorageWriteCount: number;\n authStorageClearCount: number;\n authCookieWriteCount: number;\n authCookieClearCount: number;\n authCookieMissingHardeningCount: number;\n authHeaderWriteCount: number;\n authHeaderClearCount: number;\n authCacheClientCount: number;\n authCacheClearCount: number;\n authRefreshSignalCount: number;\n authRefreshClearCount: number;\n authGuardSignalCount: number;\n authExitSignalCount: number;\n authSessionTeardownSignalCount: number;\n}\n\nfunction getScriptKind(filePath: string): ts.ScriptKind {\n switch (extname(filePath).toLowerCase()) {\n case '.tsx':\n return ts.ScriptKind.TSX;\n case '.jsx':\n return ts.ScriptKind.JSX;\n case '.ts':\n return ts.ScriptKind.TS;\n case '.js':\n return ts.ScriptKind.JS;\n default:\n return ts.ScriptKind.TSX;\n }\n}\n\nfunction isPropertyNamed(node: ts.Node | undefined, ...names: string[]): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) {\n return names.includes(node.text);\n }\n if (ts.isPrivateIdentifier(node)) {\n return names.includes(node.text);\n }\n if (ts.isStringLiteral(node)) {\n return names.includes(node.text);\n }\n return false;\n}\n\nfunction getJsxAttribute(\n attributes: ts.JsxAttributes,\n ...names: string[]\n): ts.JsxAttribute | undefined {\n return attributes.properties.find(\n (property): property is ts.JsxAttribute =>\n ts.isJsxAttribute(property) && isPropertyNamed(property.name, ...names),\n );\n}\n\nfunction getJsxTagName(node: ts.JsxOpeningLikeElement): string | null {\n if (ts.isIdentifier(node.tagName)) {\n return node.tagName.text;\n }\n if (ts.isPropertyAccessExpression(node.tagName)) {\n return node.tagName.name.text;\n }\n return null;\n}\n\nfunction getJsxAttributeLiteralValue(attribute: ts.JsxAttribute | undefined): string | null {\n if (!attribute?.initializer) return null;\n if (ts.isStringLiteral(attribute.initializer)) {\n return attribute.initializer.text;\n }\n if (ts.isJsxExpression(attribute.initializer)) {\n const expression = attribute.initializer.expression;\n if (!expression) return '';\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.text;\n }\n }\n return null;\n}\n\nfunction getJsxTextContent(node: ts.Node): string {\n if (ts.isJsxText(node)) {\n return node.getText();\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text;\n }\n if (ts.isJsxExpression(node)) {\n return node.expression ? getJsxTextContent(node.expression) : '';\n }\n if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) {\n return '';\n }\n if (ts.isJsxElement(node) || ts.isJsxFragment(node)) {\n return node.children.map((child) => getJsxTextContent(child)).join('');\n }\n\n let text = '';\n node.forEachChild((child) => {\n text += getJsxTextContent(child);\n });\n return text;\n}\n\nfunction hasAccessibleLabel(attributes: ts.JsxAttributes, textContent: string): boolean {\n return Boolean(\n getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title') ||\n textContent.trim().length > 0,\n );\n}\n\nfunction isNonSemanticInteractiveTag(tagName: string | null): boolean {\n return ['div', 'span', 'section', 'article', 'li'].includes(tagName ?? '');\n}\n\nfunction collectLabelForIds(root: ts.Node): Set<string> {\n const ids = new Set<string>();\n\n const walk = (node: ts.Node) => {\n if (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) {\n const tagName = getJsxTagName(node);\n if (tagName === 'label') {\n const htmlForValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.attributes, 'htmlFor', 'for'),\n );\n if (htmlForValue) {\n ids.add(htmlForValue);\n }\n }\n }\n\n ts.forEachChild(node, walk);\n };\n\n walk(root);\n return ids;\n}\n\nfunction isWrappedInJsxLabel(node: ts.Node): boolean {\n let current: ts.Node | undefined = node.parent;\n while (current) {\n if (ts.isJsxElement(current) && getJsxTagName(current.openingElement) === 'label') {\n return true;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction hasAncestorJsxTag(node: ts.Node, tagName: string): boolean {\n let current: ts.Node | undefined = node.parent;\n while (current) {\n if (ts.isJsxElement(current) && getJsxTagName(current.openingElement) === tagName) {\n return true;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction isLabelableFormControl(tagName: string | null, attributes: ts.JsxAttributes): boolean {\n if (!tagName) return false;\n if (tagName === 'select' || tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n\n const inputType = (\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'type')) ?? 'text'\n ).toLowerCase();\n return !['hidden', 'submit', 'reset', 'button'].includes(inputType);\n}\n\nfunction getNormalizedInputType(attributes: ts.JsxAttributes): string {\n return (getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'type')) ?? 'text')\n .trim()\n .toLowerCase();\n}\n\nfunction hasFormControlLabel(\n node: ts.Node,\n tagName: string | null,\n attributes: ts.JsxAttributes,\n labelForIds: Set<string>,\n textContent: string,\n): boolean {\n if (!isLabelableFormControl(tagName, attributes)) return true;\n if (hasAccessibleLabel(attributes, textContent)) return true;\n if (isWrappedInJsxLabel(node)) return true;\n\n const idValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id'));\n return Boolean(idValue && labelForIds.has(idValue));\n}\n\nfunction isExternalLinkTargetBlankWithoutRel(attributes: ts.JsxAttributes): boolean {\n const targetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'target'));\n if (targetValue !== '_blank') return false;\n\n const hrefValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!hrefValue || !/^(?:https?:)?\\/\\//i.test(hrefValue)) return false;\n\n const relValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'rel')) ?? '';\n return !/\\bnoopener\\b/i.test(relValue) || !/\\bnoreferrer\\b/i.test(relValue);\n}\n\nfunction isLinkLikeTag(tagName: string | null): boolean {\n return tagName === 'a' || tagName === 'Link' || tagName === 'NavLink';\n}\n\nfunction valueContainsInsecureRemoteAsset(value: string | null): boolean {\n if (!value) return false;\n return value\n .split(',')\n .map((candidate) => candidate.trim().split(/\\s+/)[0] ?? '')\n .some((candidate) => /^http:\\/\\//i.test(candidate));\n}\n\nfunction isInsecureExternalImage(attributes: ts.JsxAttributes): boolean {\n const srcValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'src'));\n const srcSetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'srcSet', 'srcset'));\n return (\n valueContainsInsecureRemoteAsset(srcValue) || valueContainsInsecureRemoteAsset(srcSetValue)\n );\n}\n\nfunction isInsecureExternalUrl(value: string | null): boolean {\n return /^http:\\/\\//i.test(value?.trim() ?? '');\n}\n\nfunction isImageLikeTag(tagName: string | null): boolean {\n return tagName === 'img' || tagName === 'Image';\n}\n\nfunction isImageSourceLikeTag(tagName: string | null): boolean {\n return isImageLikeTag(tagName) || tagName === 'source';\n}\n\nfunction isDialogLikeElement(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'dialog') return true;\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'))\n ?.trim()\n .toLowerCase();\n return roleValue === 'dialog' || roleValue === 'alertdialog';\n}\n\nfunction hasDialogLabel(attributes: ts.JsxAttributes): boolean {\n return Boolean(getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title'));\n}\n\nfunction hasDialogModalHint(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'dialog' && getJsxAttribute(attributes, 'open')) {\n return true;\n }\n const modalValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'aria-modal'))\n ?.trim()\n .toLowerCase();\n return modalValue === 'true';\n}\n\nfunction isNavigationLandmark(tagName: string | null, attributes: ts.JsxAttributes): boolean {\n if (tagName === 'nav') return true;\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'))\n ?.trim()\n .toLowerCase();\n return roleValue === 'navigation';\n}\n\nfunction hasNavigationLabel(attributes: ts.JsxAttributes): boolean {\n return Boolean(getJsxAttribute(attributes, 'aria-label', 'aria-labelledby', 'title'));\n}\n\nfunction getJsxAttributeOwner(\n attribute: ts.JsxAttribute,\n): ts.JsxOpeningElement | ts.JsxSelfClosingElement | null {\n const attributes = attribute.parent;\n if (!attributes || !ts.isJsxAttributes(attributes)) return null;\n const owner = attributes.parent;\n if (ts.isJsxOpeningElement(owner) || ts.isJsxSelfClosingElement(owner)) {\n return owner;\n }\n return null;\n}\n\nfunction isSafeJsonLdDangerouslySetInnerHtml(attribute: ts.JsxAttribute): boolean {\n const owner = getJsxAttributeOwner(attribute);\n if (!owner || getJsxTagName(owner) !== 'script') return false;\n\n const typeValue = getJsxAttributeLiteralValue(getJsxAttribute(owner.attributes, 'type'))\n ?.trim()\n .toLowerCase();\n if (typeValue !== 'application/ld+json') return false;\n\n const sourceText = attribute.getText();\n return /\\bJSON\\.stringify\\s*\\(/.test(sourceText) && /\\\\u003c/i.test(sourceText);\n}\n\nfunction hasInsecureFormAction(attributes: ts.JsxAttributes): boolean {\n const actionValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'action'));\n const normalized = actionValue?.trim().toLowerCase() ?? '';\n return (\n /^http:\\/\\//i.test(normalized) ||\n /^javascript:/i.test(normalized) ||\n /^mailto:/i.test(normalized) ||\n /^data:/i.test(normalized)\n );\n}\n\nfunction isAuthLikeInputAttributes(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n if (inputType === 'email' || inputType === 'password') {\n return true;\n }\n\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n return (\n ['email', 'username', 'current-password', 'new-password', 'one-time-code'].includes(\n autocompleteValue ?? '',\n ) || isOtpLikeInputAttributes(attributes)\n );\n}\n\nfunction getInputIdentityText(attributes: ts.JsxAttributes): string {\n return [\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'name')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'placeholder')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'aria-label')),\n getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'autocomplete', 'autoComplete')),\n ]\n .filter((value): value is string => Boolean(value))\n .join(' ')\n .toLowerCase();\n}\n\nfunction isOtpLikeInputAttributes(attributes: ts.JsxAttributes): boolean {\n const identityText = getInputIdentityText(attributes);\n if (!identityText) return false;\n return /(?:one[- ]time|otp|verification(?:[-_ ]?code)?|authenticator|2fa|mfa|totp|passcode)/i.test(\n identityText,\n );\n}\n\nfunction hasOtpAutocompleteIssue(attributes: ts.JsxAttributes): boolean {\n if (!isOtpLikeInputAttributes(attributes)) return false;\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n return autocompleteValue !== 'one-time-code';\n}\n\nfunction hasAuthInputTypeMismatch(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const nameValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'name'))\n ?.trim()\n .toLowerCase();\n\n const looksLikePasswordField =\n autocompleteValue === 'current-password' ||\n autocompleteValue === 'new-password' ||\n /password|passcode|pin/.test(nameValue ?? '');\n if (looksLikePasswordField && inputType !== 'password') {\n return true;\n }\n\n const looksLikeEmailField =\n autocompleteValue === 'email' || /(?:^|[-_])(email|e-mail)(?:$|[-_])/.test(nameValue ?? '');\n if (looksLikeEmailField && inputType !== 'email') {\n return true;\n }\n\n return false;\n}\n\nfunction hasAuthAutocompleteSemanticMismatch(attributes: ts.JsxAttributes): boolean {\n const inputType = getNormalizedInputType(attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n\n if (!autocompleteValue) return false;\n\n if (inputType === 'password') {\n return !['current-password', 'new-password'].includes(autocompleteValue);\n }\n\n if (inputType === 'email') {\n return !['email', 'username'].includes(autocompleteValue);\n }\n\n return false;\n}\n\nfunction jsxTreeContainsAuthInput(node: ts.Node): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName === 'input' && isAuthLikeInputAttributes(current.attributes)) {\n found = true;\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName === 'input' && isAuthLikeInputAttributes(current.openingElement.attributes)) {\n found = true;\n return;\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction hasInsecureAuthFormMethod(node: ts.JsxElement): boolean {\n if (!jsxTreeContainsAuthInput(node)) return false;\n const methodValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.openingElement.attributes, 'method'),\n );\n if (!methodValue) return true;\n return methodValue.trim().toLowerCase() === 'get';\n}\n\nfunction jsxTreeHasSubmitControl(node: ts.Node): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName === 'button') {\n const typeValue = getJsxAttributeLiteralValue(getJsxAttribute(current.attributes, 'type'))\n ?.trim()\n .toLowerCase();\n if (!typeValue || typeValue === 'submit') {\n found = true;\n }\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(current.attributes);\n if (inputType === 'submit') {\n found = true;\n }\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName === 'button') {\n const typeValue = getJsxAttributeLiteralValue(\n getJsxAttribute(current.openingElement.attributes, 'type'),\n )\n ?.trim()\n .toLowerCase();\n if (!typeValue || typeValue === 'submit') {\n found = true;\n return;\n }\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(current.openingElement.attributes);\n if (inputType === 'submit') {\n found = true;\n return;\n }\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction jsxTreeHasTag(node: ts.Node, tagNames: string[]): boolean {\n let found = false;\n const wanted = new Set(tagNames);\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isJsxSelfClosingElement(current)) {\n const tagName = getJsxTagName(current);\n if (tagName && wanted.has(tagName)) {\n found = true;\n }\n return;\n }\n\n if (ts.isJsxElement(current)) {\n const tagName = getJsxTagName(current.openingElement);\n if (tagName && wanted.has(tagName)) {\n found = true;\n return;\n }\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n if (ts.isJsxFragment(current)) {\n for (const child of current.children) {\n visit(child);\n if (found) return;\n }\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(node);\n return found;\n}\n\nfunction hasAuthFormWithoutSubmitControl(node: ts.JsxElement): boolean {\n return jsxTreeContainsAuthInput(node) && !jsxTreeHasSubmitControl(node);\n}\n\nfunction getExpressionLiteralValue(expression: ts.Expression | undefined): string | null {\n if (!expression) return null;\n if (ts.isStringLiteral(expression) || ts.isNoSubstitutionTemplateLiteral(expression)) {\n return expression.text;\n }\n if (ts.isParenthesizedExpression(expression)) {\n return getExpressionLiteralValue(expression.expression);\n }\n if (ts.isAsExpression(expression) || ts.isTypeAssertionExpression(expression)) {\n return getExpressionLiteralValue(expression.expression);\n }\n return null;\n}\n\nfunction getObjectLiteralStringPropertyValue(\n expression: ts.Expression | undefined,\n ...propertyNames: string[]\n): string | null {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return null;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !propertyNames.includes(propertyName)) continue;\n const value = getExpressionLiteralValue(property.initializer);\n if (value) return value;\n }\n return null;\n}\n\nfunction getObjectLiteralBooleanPropertyValue(\n expression: ts.Expression | undefined,\n ...propertyNames: string[]\n): boolean | null {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return null;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !propertyNames.includes(propertyName)) continue;\n if (property.initializer.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (property.initializer.kind === ts.SyntaxKind.FalseKeyword) return false;\n }\n return null;\n}\n\nfunction collectNamedFunctionLikeDeclarations(\n root: ts.Node,\n): Map<string, ts.FunctionLikeDeclarationBase> {\n const declarations = new Map<string, ts.FunctionLikeDeclarationBase>();\n\n const visit = (node: ts.Node): void => {\n if (ts.isFunctionDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n declarations.set(node.name.text, node);\n }\n\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n if (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer)) {\n declarations.set(node.name.text, node.initializer);\n }\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return declarations;\n}\n\nconst namedFunctionLikeDeclarationCache = new WeakMap<\n ts.SourceFile,\n Map<string, ts.FunctionLikeDeclarationBase>\n>();\n\nfunction getCachedNamedFunctionLikeDeclarations(\n sourceFile: ts.SourceFile,\n): Map<string, ts.FunctionLikeDeclarationBase> {\n const cached = namedFunctionLikeDeclarationCache.get(sourceFile);\n if (cached) return cached;\n const declarations = collectNamedFunctionLikeDeclarations(sourceFile);\n namedFunctionLikeDeclarationCache.set(sourceFile, declarations);\n return declarations;\n}\n\nfunction collectNamedExpressionInitializers(root: ts.Node): Map<string, ts.Expression> {\n const initializers = new Map<string, ts.Expression>();\n\n const visit = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n initializers.set(node.name.text, node.initializer);\n }\n\n if (ts.isVariableDeclaration(node) && ts.isArrayBindingPattern(node.name) && node.initializer) {\n const firstElement = node.name.elements[0];\n if (\n firstElement &&\n !ts.isOmittedExpression(firstElement) &&\n ts.isBindingElement(firstElement) &&\n ts.isIdentifier(firstElement.name)\n ) {\n initializers.set(firstElement.name.text, node.initializer);\n }\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return initializers;\n}\n\ninterface NamedPropertyAlias {\n initializer?: ts.Expression;\n propertyName: string;\n propertyPath: string[];\n}\n\nfunction getPropertyNameText(name: ts.PropertyName | ts.BindingName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction collectNamedPropertyAliases(root: ts.Node): Map<string, NamedPropertyAlias> {\n const aliases = new Map<string, NamedPropertyAlias>();\n\n const collectFromBindingPattern = (\n pattern: ts.ObjectBindingPattern,\n initializer: ts.Expression | undefined,\n propertyPath: string[],\n ): void => {\n for (const element of pattern.elements) {\n if (element.dotDotDotToken) continue;\n const propertyName =\n getPropertyNameText(element.propertyName) ?? getPropertyNameText(element.name);\n if (!propertyName) continue;\n const nextPath = [...propertyPath, propertyName];\n if (ts.isIdentifier(element.name)) {\n aliases.set(element.name.text, { initializer, propertyName, propertyPath: nextPath });\n continue;\n }\n if (ts.isObjectBindingPattern(element.name)) {\n collectFromBindingPattern(element.name, initializer, nextPath);\n }\n }\n };\n\n const visit = (node: ts.Node): void => {\n if (\n ts.isVariableDeclaration(node) &&\n ts.isObjectBindingPattern(node.name) &&\n node.initializer\n ) {\n collectFromBindingPattern(node.name, node.initializer, []);\n }\n\n if (ts.isParameter(node) && ts.isObjectBindingPattern(node.name)) {\n collectFromBindingPattern(node.name, undefined, []);\n }\n\n node.forEachChild(visit);\n };\n\n visit(root);\n return aliases;\n}\n\nfunction resolveFunctionLikeHandler(\n expression: ts.Expression | undefined,\n namedFunctions: Map<string, ts.FunctionLikeDeclarationBase>,\n): ts.FunctionLikeDeclarationBase | null {\n if (!expression) return null;\n if (ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)) {\n return expression;\n }\n if (ts.isIdentifier(expression)) {\n return namedFunctions.get(expression.text) ?? null;\n }\n return null;\n}\n\nfunction getFunctionLikeReturnExpressions(node: ts.FunctionLikeDeclarationBase): ts.Expression[] {\n if (ts.isArrowFunction(node) && !ts.isBlock(node.body)) {\n return [node.body];\n }\n\n const body = node.body;\n if (!body || !ts.isBlock(body)) {\n return [];\n }\n\n const expressions: ts.Expression[] = [];\n const visit = (current: ts.Node): void => {\n if (\n current !== body &&\n (ts.isFunctionDeclaration(current) ||\n ts.isFunctionExpression(current) ||\n ts.isArrowFunction(current) ||\n ts.isMethodDeclaration(current) ||\n ts.isGetAccessorDeclaration(current) ||\n ts.isSetAccessorDeclaration(current) ||\n ts.isConstructorDeclaration(current))\n ) {\n return;\n }\n\n if (ts.isReturnStatement(current) && current.expression) {\n expressions.push(current.expression);\n return;\n }\n\n current.forEachChild(visit);\n };\n\n visit(body);\n return expressions;\n}\n\nfunction getFunctionLikeCacheKey(node: ts.FunctionLikeDeclarationBase): string {\n return `${node.pos}:${node.end}`;\n}\n\nfunction bindFunctionLikeArguments(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n namedExpressions: Map<string, ts.Expression>,\n): Map<string, ts.Expression> {\n const boundExpressions = new Map(namedExpressions);\n\n functionLike.parameters.forEach((parameter, index) => {\n const argument = args[index];\n if (!argument || !ts.isIdentifier(parameter.name)) return;\n boundExpressions.set(parameter.name.text, argument);\n });\n\n return boundExpressions;\n}\n\nfunction getMemberAccessPropertyName(expression: ts.Expression | undefined): string | null {\n if (!expression || !isMemberAccessExpression(expression)) return null;\n if (isPropertyLikeAccessExpression(expression)) {\n return expression.name.text;\n }\n return getExpressionLiteralValue(expression.argumentExpression);\n}\n\ninterface ResolvedObjectLiteralExpression {\n namedExpressions: Map<string, ts.Expression>;\n objectLiteral: ts.ObjectLiteralExpression;\n}\n\ninterface ResolvedTrackedFunctionLike {\n functionLike: ts.FunctionLikeDeclarationBase;\n namedExpressions: Map<string, ts.Expression>;\n}\n\nfunction getObjectLiteralPropertyExpression(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string,\n namedExpressions: Map<string, ts.Expression>,\n): ts.Expression | null {\n for (const property of objectLiteral.properties) {\n if (ts.isPropertyAssignment(property) && getPropertyNameText(property.name) === propertyName) {\n return property.initializer;\n }\n\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === propertyName) {\n return namedExpressions.get(property.name.text) ?? null;\n }\n }\n\n return null;\n}\n\nconst MAX_OPEN_REDIRECT_RESOLUTION_DEPTH = 40;\n\nfunction resolveObjectLiteralExpressionAtPropertyPath(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n propertyPath: string[],\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n let resolvedObjectLiteral = resolveObjectLiteralExpression(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n\n for (const propertyName of propertyPath) {\n const propertyExpression = getObjectLiteralPropertyExpression(\n resolvedObjectLiteral.objectLiteral,\n propertyName,\n resolvedObjectLiteral.namedExpressions,\n );\n if (!propertyExpression) return null;\n resolvedObjectLiteral = resolveObjectLiteralExpression(\n propertyExpression,\n sourceFile,\n resolvedObjectLiteral.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n }\n\n return resolvedObjectLiteral;\n}\n\nfunction resolveReturnedObjectLiteralExpression(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n const functionKey = getFunctionLikeCacheKey(functionLike);\n if (seenFunctions.has(functionKey)) return null;\n\n seenFunctions.add(functionKey);\n const boundExpressions = bindFunctionLikeArguments(functionLike, args, namedExpressions);\n for (const returnExpression of getFunctionLikeReturnExpressions(functionLike)) {\n const objectLiteral = resolveObjectLiteralExpression(\n returnExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (objectLiteral) {\n seenFunctions.delete(functionKey);\n return objectLiteral;\n }\n }\n\n seenFunctions.delete(functionKey);\n return null;\n}\n\nfunction resolveObjectLiteralExpression(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string> = new Set(),\n depth = 0,\n): ResolvedObjectLiteralExpression | null {\n if (!expression) return null;\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return resolveObjectLiteralExpression(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (ts.isObjectLiteralExpression(expression)) {\n return { objectLiteral: expression, namedExpressions };\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return null;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = resolveObjectLiteralExpression(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return null;\n\n seenIdentifiers.add(expression.text);\n const result = resolveObjectLiteralExpressionAtPropertyPath(\n propertyAlias.initializer,\n sourceFile,\n propertyAlias.propertyPath,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!functionResolution) return null;\n return resolveReturnedObjectLiteralExpression(\n functionResolution.functionLike,\n expression.arguments,\n sourceFile,\n functionResolution.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (isMemberAccessExpression(expression)) {\n const propertyName = getMemberAccessPropertyName(expression);\n if (!propertyName) return null;\n return resolveObjectLiteralExpressionAtPropertyPath(\n expression.expression,\n sourceFile,\n [propertyName],\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n return null;\n}\n\nfunction findFunctionLikeOnObjectLiteral(\n objectLiteral: ts.ObjectLiteralExpression,\n propertyName: string,\n namedFunctions: Map<string, ts.FunctionLikeDeclarationBase>,\n): ts.FunctionLikeDeclarationBase | null {\n for (const property of objectLiteral.properties) {\n if (ts.isMethodDeclaration(property) && getPropertyNameText(property.name) === propertyName) {\n return property;\n }\n\n if (ts.isPropertyAssignment(property) && getPropertyNameText(property.name) === propertyName) {\n return resolveFunctionLikeHandler(property.initializer, namedFunctions);\n }\n\n if (ts.isShorthandPropertyAssignment(property) && property.name.text === propertyName) {\n return namedFunctions.get(property.name.text) ?? null;\n }\n }\n\n return null;\n}\n\nfunction resolveReturnedTrackedFunctionLike(\n functionLike: ts.FunctionLikeDeclarationBase,\n args: readonly ts.Expression[],\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string>,\n depth = 0,\n): ResolvedTrackedFunctionLike | null {\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n const functionKey = getFunctionLikeCacheKey(functionLike);\n if (seenFunctions.has(functionKey)) return null;\n\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n const boundExpressions = bindFunctionLikeArguments(functionLike, args, namedExpressions);\n for (const returnExpression of getFunctionLikeReturnExpressions(functionLike)) {\n const result = resolveTrackedOpenRedirectFunctionLike(\n returnExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n nextSeenFunctions,\n depth + 1,\n );\n if (result) return result;\n }\n\n return null;\n}\n\nfunction resolveTrackedOpenRedirectFunctionLike(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n seenFunctions: Set<string> = new Set(),\n depth = 0,\n): ResolvedTrackedFunctionLike | null {\n if (!expression) return null;\n if (depth > MAX_OPEN_REDIRECT_RESOLUTION_DEPTH) return null;\n\n const namedFunctions = getCachedNamedFunctionLikeDeclarations(sourceFile);\n const directFunctionLike = resolveFunctionLikeHandler(expression, namedFunctions);\n if (directFunctionLike) {\n return { functionLike: directFunctionLike, namedExpressions };\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!functionResolution) return null;\n return resolveReturnedTrackedFunctionLike(\n functionResolution.functionLike,\n expression.arguments,\n sourceFile,\n functionResolution.namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return null;\n\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = resolveTrackedOpenRedirectFunctionLike(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n depth + 1,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return null;\n\n const resolvedObjectLiteral = resolveObjectLiteralExpressionAtPropertyPath(\n propertyAlias.initializer,\n sourceFile,\n propertyAlias.propertyPath.slice(0, -1),\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n const functionLike = findFunctionLikeOnObjectLiteral(\n resolvedObjectLiteral.objectLiteral,\n propertyAlias.propertyName,\n namedFunctions,\n );\n return functionLike\n ? { functionLike, namedExpressions: resolvedObjectLiteral.namedExpressions }\n : null;\n }\n\n if (!isMemberAccessExpression(expression)) {\n return null;\n }\n\n const propertyName = getMemberAccessPropertyName(expression);\n if (!propertyName) return null;\n const resolvedObjectLiteral = resolveObjectLiteralExpression(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(seenIdentifiers),\n seenFunctions,\n depth + 1,\n );\n if (!resolvedObjectLiteral) return null;\n const functionLike = findFunctionLikeOnObjectLiteral(\n resolvedObjectLiteral.objectLiteral,\n propertyName,\n namedFunctions,\n );\n return functionLike\n ? { functionLike, namedExpressions: resolvedObjectLiteral.namedExpressions }\n : null;\n}\n\nfunction functionLikeReferencesOrigin(node: ts.FunctionLikeDeclarationBase): boolean {\n let found = false;\n\n const visit = (current: ts.Node): void => {\n if (found) return;\n\n if (ts.isPropertyAccessExpression(current) && isPropertyNamed(current.name, 'origin')) {\n found = true;\n return;\n }\n\n if (ts.isIdentifier(current) && current.text === 'origin') {\n found = true;\n return;\n }\n\n if (ts.isBindingElement(current)) {\n if (ts.isIdentifier(current.name) && current.name.text === 'origin') {\n found = true;\n return;\n }\n if (current.propertyName && isPropertyNamed(current.propertyName, 'origin')) {\n found = true;\n return;\n }\n }\n\n current.forEachChild(visit);\n };\n\n node.forEachChild(visit);\n return found;\n}\n\nfunction isAddEventListenerCall(node: CallLikeExpression): boolean {\n return (\n (ts.isIdentifier(node.expression) && node.expression.text === 'addEventListener') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'addEventListener'))\n );\n}\n\nfunction isCookieMutationSetCall(node: CallLikeExpression): boolean {\n if (\n !ts.isPropertyAccessExpression(node.expression) ||\n !isPropertyNamed(node.expression.name, 'set')\n ) {\n return false;\n }\n\n return (\n (ts.isIdentifier(node.expression.expression) &&\n ['Cookies', 'cookieStore', 'cookies'].includes(node.expression.expression.text)) ||\n (ts.isPropertyAccessExpression(node.expression.expression) &&\n isPropertyNamed(node.expression.expression.name, 'cookies', 'cookieStore'))\n );\n}\n\nfunction expressionLooksLikeAuthCookieName(\n node: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n): boolean {\n if (!node) return false;\n if (isAuthStorageKeyLiteral(node)) return true;\n return hasAuthCredentialText(node, sourceFile);\n}\n\nfunction objectLiteralLooksLikeAuthCookieConfig(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n): boolean {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return false;\n for (const property of expression.properties) {\n if (!ts.isPropertyAssignment(property)) continue;\n const propertyName = ts.isIdentifier(property.name)\n ? property.name.text\n : ts.isStringLiteral(property.name)\n ? property.name.text\n : null;\n if (!propertyName || !['name', 'key', 'cookie'].includes(propertyName)) continue;\n return expressionLooksLikeAuthCookieName(property.initializer, sourceFile);\n }\n return false;\n}\n\nfunction hasExplicitAuthCookieHardening(expression: ts.Expression | undefined): boolean {\n if (!expression || !ts.isObjectLiteralExpression(expression)) return false;\n\n const httpOnly = getObjectLiteralBooleanPropertyValue(expression, 'httpOnly', 'http_only');\n const secure = getObjectLiteralBooleanPropertyValue(expression, 'secure');\n const sameSite = getObjectLiteralStringPropertyValue(expression, 'sameSite', 'same_site');\n\n return httpOnly === true && secure === true && Boolean(sameSite?.trim());\n}\n\nfunction isSetCookieHeaderName(node: ts.Expression | undefined): boolean {\n const literal = getExpressionLiteralValue(node)?.trim().toLowerCase();\n return literal === 'set-cookie';\n}\n\nfunction cookieHeaderStringLooksAuthLike(value: string): boolean {\n return /\\b(?:auth|session|token|jwt|refresh_token|access_token)[^=]*=/i.test(value);\n}\n\nfunction cookieHeaderStringHasHardening(value: string): boolean {\n return (\n /;\\s*httponly\\b/i.test(value) && /;\\s*secure\\b/i.test(value) && /;\\s*samesite=/i.test(value)\n );\n}\n\nfunction collectCookieHeaderStrings(expression: ts.Expression | undefined): string[] {\n if (!expression) return [];\n const literal = getExpressionLiteralValue(expression);\n if (literal !== null) return [literal];\n if (ts.isArrayLiteralExpression(expression)) {\n return expression.elements\n .map((element) => (ts.isExpression(element) ? getExpressionLiteralValue(element) : null))\n .filter((value): value is string => value !== null);\n }\n return [];\n}\n\nfunction isInsecureTransportUrl(value: string | null): boolean {\n return typeof value === 'string' && /^(?:http|ws):\\/\\//i.test(value.trim());\n}\n\nfunction isPropertyLikeAccessExpression(\n node: ts.Node | undefined,\n): node is ts.PropertyAccessExpression | ts.PropertyAccessChain {\n return Boolean(node && (ts.isPropertyAccessExpression(node) || ts.isPropertyAccessChain(node)));\n}\n\nfunction isElementLikeAccessExpression(\n node: ts.Node | undefined,\n): node is ts.ElementAccessExpression | ts.ElementAccessChain {\n return Boolean(node && (ts.isElementAccessExpression(node) || ts.isElementAccessChain(node)));\n}\n\ntype CallLikeExpression = ts.CallExpression | ts.CallChain;\n\nfunction isMemberAccessExpression(\n node: ts.Node | undefined,\n): node is\n | ts.PropertyAccessExpression\n | ts.PropertyAccessChain\n | ts.ElementAccessExpression\n | ts.ElementAccessChain {\n return isPropertyLikeAccessExpression(node) || isElementLikeAccessExpression(node);\n}\n\nfunction isCallLikeExpression(node: ts.Node | undefined): node is CallLikeExpression {\n return Boolean(node && (ts.isCallExpression(node) || ts.isCallChain(node)));\n}\n\nfunction isMemberAccessNamed(node: ts.Node | undefined, ...names: string[]): boolean {\n if (!node) return false;\n if (isPropertyLikeAccessExpression(node)) {\n return isPropertyNamed(node.name, ...names);\n }\n if (isElementLikeAccessExpression(node)) {\n return isPropertyNamed(node.argumentExpression, ...names);\n }\n return false;\n}\n\nfunction isLocationObjectExpression(expression: ts.Expression): boolean {\n return (\n (ts.isIdentifier(expression) && expression.text === 'location') ||\n ((ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) &&\n ts.isIdentifier(expression.expression) &&\n ['window', 'globalThis', 'document', 'self', 'parent', 'top'].includes(\n expression.expression.text,\n ) &&\n isMemberAccessNamed(expression, 'location'))\n );\n}\n\nfunction isLocationAssignmentTarget(expression: ts.Expression): boolean {\n return (\n isLocationObjectExpression(expression) ||\n ((ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) &&\n isLocationObjectExpression(expression.expression) &&\n isMemberAccessNamed(expression, 'href'))\n );\n}\n\nfunction isFetchLikeCall(node: CallLikeExpression): boolean {\n return (\n (ts.isIdentifier(node.expression) && node.expression.text === 'fetch') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'fetch'))\n );\n}\n\nfunction isAxiosLikeCall(node: CallLikeExpression): boolean {\n if (!ts.isPropertyAccessExpression(node.expression)) return false;\n return (\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'axios' &&\n isPropertyNamed(\n node.expression.name,\n 'get',\n 'post',\n 'put',\n 'patch',\n 'delete',\n 'head',\n 'options',\n 'request',\n )\n );\n}\n\nfunction isAxiosConfigCall(node: CallLikeExpression): boolean {\n return ts.isIdentifier(node.expression) && node.expression.text === 'axios';\n}\n\nfunction isRealtimeTransportConstructor(node: ts.NewExpression): boolean {\n return (\n ts.isIdentifier(node.expression) &&\n (node.expression.text === 'WebSocket' || node.expression.text === 'EventSource')\n );\n}\n\nfunction hasPlaceholderNavigationTarget(attributes: ts.JsxAttributes): boolean {\n const targetValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!targetValue) return false;\n\n const normalized = targetValue.trim().toLowerCase();\n return (\n normalized === '#' ||\n normalized === '/#' ||\n normalized === 'javascript:' ||\n normalized === 'javascript:void(0)' ||\n normalized === 'javascript:void(0);'\n );\n}\n\nfunction isExternalUrl(value: string | null): boolean {\n return typeof value === 'string' && /^(?:https?:)?\\/\\//i.test(value.trim());\n}\n\nfunction parseExternalUrl(value: string | null): URL | null {\n if (!isExternalUrl(value)) return null;\n\n const normalized = value?.trim() ?? '';\n const input = normalized.startsWith('//') ? `https:${normalized}` : normalized;\n try {\n return new URL(input);\n } catch {\n return null;\n }\n}\n\nfunction isProviderAuthorizeUrl(url: URL): boolean {\n const hostAndPath = `${url.hostname}${url.pathname}`.toLowerCase();\n const hasAuthorizeLikePath = /(?:oauth|authorize|openid|sso|login\\/oauth)/i.test(hostAndPath);\n const hasProviderQuery = ['client_id', 'redirect_uri', 'response_type', 'scope'].some((param) =>\n url.searchParams.has(param),\n );\n return (\n (hasAuthorizeLikePath && hasProviderQuery) ||\n (url.searchParams.has('client_id') && url.searchParams.has('redirect_uri'))\n );\n}\n\nfunction isAuthProviderUrlMissingState(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n return !url.searchParams.has('state');\n}\n\nfunction isAuthProviderCodeFlowMissingPkce(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n\n const responseType = url.searchParams.get('response_type')?.toLowerCase() ?? '';\n if (!responseType.includes('code')) return false;\n return !url.searchParams.has('code_challenge');\n}\n\nfunction isAuthProviderIdTokenFlowMissingNonce(value: string | null): boolean {\n const url = parseExternalUrl(value);\n if (!url || !isProviderAuthorizeUrl(url)) return false;\n\n const responseType = url.searchParams.get('response_type')?.toLowerCase() ?? '';\n if (!responseType.includes('id_token')) return false;\n return !url.searchParams.has('nonce');\n}\n\nfunction hasMainLandmarkSignal(attributes: ts.JsxAttributes, tagName: string | null): boolean {\n if (tagName === 'main') return true;\n\n const roleValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'role'));\n return roleValue?.trim().toLowerCase() === 'main';\n}\n\nfunction getMainLandmarkId(attributes: ts.JsxAttributes, tagName: string | null): string | null {\n if (!hasMainLandmarkSignal(attributes, tagName)) return null;\n\n const idValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'id'));\n return idValue?.trim() ? idValue.trim() : null;\n}\n\nfunction getSkipNavTargetId(attributes: ts.JsxAttributes, tagName: string | null): string | null {\n if (tagName !== 'a') return null;\n\n const hrefValue = getJsxAttributeLiteralValue(getJsxAttribute(attributes, 'href', 'to'));\n if (!hrefValue?.startsWith('#')) return null;\n\n const targetId = hrefValue.slice(1).trim();\n return targetId.length > 0 ? targetId : null;\n}\n\nfunction isAuthStorageKeyLiteral(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n if (node.text === 'decantr_authenticated') return false;\n return /(?:token|auth|jwt|session|access_token|refresh_token)/i.test(node.text);\n }\n return false;\n}\n\nfunction isBrowserStorageObject(node: ts.Expression): boolean {\n return ts.isIdentifier(node) && (node.text === 'localStorage' || node.text === 'sessionStorage');\n}\n\nfunction isDocumentObject(node: ts.Expression): boolean {\n return ts.isIdentifier(node) && node.text === 'document';\n}\n\nfunction isCookiePropertyAccess(node: ts.Expression): boolean {\n return (\n ts.isPropertyAccessExpression(node) &&\n isDocumentObject(node.expression) &&\n isPropertyNamed(node.name, 'cookie')\n );\n}\n\nfunction hasAuthCredentialText(node: ts.Node, sourceFile: ts.SourceFile): boolean {\n return /(?:token|auth|jwt|session|access_token|refresh_token)/i.test(node.getText(sourceFile));\n}\n\nfunction isAuthorizationHeaderName(node: ts.Node | undefined): boolean {\n if (!node) return false;\n if (ts.isIdentifier(node)) {\n return /^authorization$/i.test(node.text);\n }\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return /^authorization$/i.test(node.text);\n }\n if (ts.isComputedPropertyName(node)) {\n return isAuthorizationHeaderName(node.expression);\n }\n return false;\n}\n\nfunction isAuthorizationHeaderAccess(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n return (\n (ts.isPropertyAccessExpression(node) && isAuthorizationHeaderName(node.name)) ||\n (ts.isElementAccessExpression(node) && isAuthorizationHeaderName(node.argumentExpression))\n );\n}\n\nfunction isHeaderClearValue(node: ts.Expression | undefined): boolean {\n if (!node) return false;\n const literal = getExpressionLiteralValue(node);\n if (literal !== null) {\n return literal.trim().length === 0;\n }\n return (\n node.kind === ts.SyntaxKind.NullKeyword ||\n node.kind === ts.SyntaxKind.UndefinedKeyword ||\n (ts.isIdentifier(node) && node.text === 'undefined')\n );\n}\n\nfunction countAuthGuardSignals(code: string): number {\n const patterns = [\n /\\b(?:ProtectedRoute|AuthGuard|RequireAuth|withAuth|requireAuth|requireAdmin|ensureAuth|ensureAdmin|useRequireAuth)\\b/,\n /\\b(?:useAuth|useSession|getServerSession|authGuard|isAuthenticated|isSignedIn)\\b/,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)[^'\"`]*['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(/,\n /\\bbeforeEnter\\b/,\n /\\bmiddleware\\b/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countSkipNavSignals(code: string): number {\n const patterns = [\n /\\bskip(?:-| )?nav(?:igation)?\\b/i,\n /\\bskip to (?:content|main|navigation)\\b/i,\n /href\\s*=\\s*[\"']#(?:main|content|main-content|app-main)[\"']/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSessionSignals(code: string): number {\n const patterns = [\n /\\b(?:useAuth|useSession|getSession|getServerSession|sessionState|authState)\\b/,\n /\\b(?:supabase\\.auth\\.getSession|auth\\.getSession|session\\.(?:user|token|status)|auth\\.(?:user|session|status))\\b/,\n /\\bstatus\\s*===?\\s*['\"`](?:authenticated|unauthenticated|loading)['\"`]/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthUnauthenticatedBranchSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*!\\s*(?:session|user|currentUser|currentSession|authUser)\\b/i,\n /\\bif\\s*\\(\\s*(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)\\s*\\)/i,\n /\\bstatus\\s*===?\\s*['\"`]unauthenticated['\"`]/i,\n /\\bstatus\\s*!==?\\s*['\"`]authenticated['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthLoadingSignals(code: string): number {\n const patterns = [\n /\\b(?:isLoading|loading|isPending|pending|authLoading|sessionLoading)\\b/,\n /\\bstatus\\s*===?\\s*['\"`]loading['\"`]/,\n /\\b(?:Suspense|fallback|Skeleton|Spinner)\\b/,\n />\\s*(?:signing you in|redirecting|authenticating|verifying your session|checking your session|loading your workspace|finishing sign in)(?:[.!…]+)?\\s*</i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthProtectedLoadingRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthBlankLoadingRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:null|<>\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*(?:null|<>\\s*<\\/>)\\s*;?/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthAnonymousLoadingRedirectSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*{[\\s\\S]{0,260}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bif\\s*\\(\\s*[^)]*(?:status\\s*===?\\s*['\"`]loading['\"`]|isLoading|loading|isPending|pending|sessionLoading|authLoading)[^)]*\\)\\s*return\\s*\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthProtectedUnauthenticatedRenderSignals(code: string): number {\n const patterns = [\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:path|href|to)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:path|href|to)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*{\\s*[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*\\)[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\b(?:window\\.)?location\\.(?:assign|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?(?:window\\.)?location\\.href\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?<input\\b(?=[^>]*\\btype\\s*=\\s*['\"`]hidden['\"`])(?=[^>]*\\b(?:value|defaultValue)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`])[^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\bdata-(?:redirect|redirect-to|next|next-path|destination|return|return-to|to|path)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*=\\s*{\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\b(?:to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config)\\s*:\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route|pathname)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\bpayload\\s*:\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:to|path|href|action|route|pathname)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath)\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*generatePath\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^)]*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{{[^}]*\\bpathname\\s*:\\s*createPath\\(\\s*{[^}]*\\bpathname\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)[^}]*}}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*JSON\\.stringify\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*(?:new\\s+)?URLSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:redirectTo|returnTo|next|nextPath|destination|toPath|to|path|href|action|route)\\s*:\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*createSearchParams\\(\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}\\s*\\)(?:\\.toString\\(\\s*\\))?\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{\\s*\\[[\\s\\S]{0,220}?\\b(?:state|options|config|meta|details|data)\\s*:\\s*{[^}]*\\b(?:label|title|subtitle|description|value|content|name|email|avatar|src)\\s*:\\s*[^,\\]}]*\\b(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\b[^,\\]}]*[^}]*}[\\s\\S]{0,220}?\\]\\s*}[^>]*>/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\baction\\s*=\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`][\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<App(?:Shell|Layout|Panel|Page|View|Route|Gate|Guard|Screen|Portal)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Dashboard|Workspace|Admin|Billing|Account|Profile|Protected)[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<App[A-Z][A-Za-z0-9]*\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*(?:session|user|currentUser|currentSession|authUser|viewer|profile|account|member)\\s*=\\s*{[^}]+}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*=\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,320}?return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<[\\w.:-]+[^>]*>[\\s\\S]{0,220}?\\{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*\\}[\\s\\S]{0,220}?<\\/[\\w.:-]+>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<>\\s*{[^}]*\\b(?:session|user|currentUser|currentSession|authUser)\\b[^}]*}\\s*<\\/>\\s*;?/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*(?:children|props\\.children|<>\\s*{?\\s*(?:children|props\\.children)\\s*}?\\s*<\\/>)\\s*;?/gi,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*{[\\s\\S]{0,220}?return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n /\\bif\\s*\\(\\s*(?:!\\s*(?:session|user|currentUser|currentSession|authUser)|(?:session|user|currentUser|currentSession|authUser)\\s*(?:==|===)\\s*(?:null|undefined)|status\\s*===?\\s*['\"`]unauthenticated['\"`]|status\\s*!==?\\s*['\"`]authenticated['\"`])\\s*\\)\\s*return\\s*<(?:Outlet|Routes|RouterProvider)\\b[^>]*>/g,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthErrorSignals(code: string): number {\n const patterns = [\n /\\bstatus\\s*===?\\s*['\"`]error['\"`]/,\n /\\b(?:authError|sessionError|loginError|signInError|signUpError|formError|errorMessage|setError)\\b/,\n /\\bcatch\\s*\\(/,\n /\\b(?:toast|notify|notification|Alert|alert|ErrorBoundary)\\b/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSuccessSignals(code: string): number {\n const patterns = [\n /\\bstatus\\s*===?\\s*['\"`]success['\"`]/,\n /\\b(?:authSuccess|recoverySuccess|resetSuccess|passwordResetSent|resetEmailSent|verificationSent|emailSent|successMessage|setSuccess)\\b/i,\n /\\b(?:toast|notify|notification)\\.success\\b/i,\n />\\s*(?:check your email|email sent|reset link sent|password reset email sent|verification email sent|password updated|account created)\\s*</i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCallbackTokenSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`](?:code|access_token|id_token|refresh_token)['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.(?:code|access_token|id_token|refresh_token)\\b/gi,\n /\\bnew URLSearchParams\\s*\\(\\s*(?:window\\.)?location\\.hash(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)/gi,\n /\\b(?:window\\.)?location\\.hash\\b/gi,\n /\\b(?:exchangeCodeForSession|handleAuthCallback|authCallback|oauthCallback)\\b/gi,\n ];\n\n const count = patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n return count + (/callback/i.test(filePath) ? 1 : 0);\n}\n\nfunction countAuthCallbackExchangeSignals(code: string): number {\n const patterns = [\n /\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b/gi,\n /\\b(?:auth|supabase\\.auth)\\.[A-Za-z0-9_]*exchange[A-Za-z0-9_]*\\s*\\(/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackExchangeErrorSignals(code: string): number {\n const patterns = [\n /\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b[\\s\\S]{0,240}\\.catch\\s*\\(/gi,\n /try\\s*{[\\s\\S]{0,240}\\b(?:exchangeCodeForSession|exchangeTokenForSession|completeAuthCallback|finalizeAuthCallback|handleAuthCallback)\\b[\\s\\S]{0,240}catch\\s*\\(/gi,\n /\\b(?:exchangeError|callbackExchangeError|tokenExchangeError|sessionExchangeError)\\b/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackErrorSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`](?:error|error_description|error_code|error_uri)['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.(?:error|error_description|error_code|error_uri)\\b/gi,\n /\\b(?:callbackError|oauthError|providerError|authCallbackError)\\b/gi,\n /\\b(?:toast|notify|notification)\\.error\\b/gi,\n />\\s*(?:authentication failed|sign in failed|login failed|oauth error|provider error|unable to sign you in)\\s*</gi,\n ];\n\n const count = patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n return count + (/callback/i.test(filePath) && /\\b(?:error|failed|failure)\\b/i.test(code) ? 1 : 0);\n}\n\nfunction countAuthCallbackStateSignals(code: string): number {\n const patterns = [\n /\\b(?:searchParams|request\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"`]state['\"`]\\s*\\)/gi,\n /\\b(?:router\\.query|route\\.query|query)\\.state\\b/gi,\n /\\bnew URLSearchParams\\s*\\(\\s*(?:window\\.)?location\\.hash(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)\\.get\\s*\\(\\s*['\"`]state['\"`]\\s*\\)/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCallbackStateValidationSignals(code: string): number {\n let count = 0;\n\n if (/\\b(?:validateState|verifyState|assertState|compareState|checkState)\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n if (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['getItem']) > 0 &&\n hasStateComparison(code)\n ) {\n count += 1;\n }\n\n if (\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['get', 'getAll']) > 0 &&\n hasStateComparison(code)\n ) {\n count += 1;\n }\n\n if (\n /\\b(?:state|providerState|callbackState|returnedState)\\b\\s*(?:===|==|!==|!=)\\s*\\b(?:expectedState|storedState|sessionState|oauthState|csrfState)\\b/i.test(\n code,\n ) ||\n /\\b(?:expectedState|storedState|sessionState|oauthState|csrfState)\\b\\s*(?:===|==|!==|!=)\\s*\\b(?:state|providerState|callbackState|returnedState)\\b/i.test(\n code,\n )\n ) {\n count += 1;\n }\n\n return count;\n}\n\nfunction hasStateComparison(code: string): boolean {\n return /(?:state|providerState|callbackState|returnedState|expectedState|storedState|sessionState|oauthState|csrfState)\\s*(?:===|==|!==|!=)/i.test(\n code,\n );\n}\n\nfunction countStateLikeMemberCalls(code: string, receivers: string[], methods: string[]): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (const receiver of receivers) {\n const receiverLower = receiver.toLowerCase();\n for (\n let index = lowerCode.indexOf(receiverLower);\n index !== -1;\n index = lowerCode.indexOf(receiverLower, index + receiverLower.length)\n ) {\n let cursor = index + receiverLower.length;\n cursor = skipInlineWhitespace(lowerCode, cursor);\n if (lowerCode[cursor] !== '.') continue;\n cursor = skipInlineWhitespace(lowerCode, cursor + 1);\n\n for (const method of methods) {\n const methodLower = method.toLowerCase();\n if (!lowerCode.startsWith(methodLower, cursor)) continue;\n const afterMethod = skipInlineWhitespace(lowerCode, cursor + methodLower.length);\n if (lowerCode[afterMethod] !== '(') continue;\n if (callHasStateLikeStringArgument(code, afterMethod)) {\n count += 1;\n }\n }\n }\n }\n\n return count;\n}\n\nfunction countStateLikeFunctionCalls(code: string, names: string[]): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (const name of names) {\n const nameLower = name.toLowerCase();\n for (\n let index = lowerCode.indexOf(nameLower);\n index !== -1;\n index = lowerCode.indexOf(nameLower, index + nameLower.length)\n ) {\n const afterName = skipInlineWhitespace(lowerCode, index + nameLower.length);\n if (lowerCode[afterName] === '(' && callHasStateLikeStringArgument(code, afterName)) {\n count += 1;\n }\n }\n }\n\n return count;\n}\n\nfunction skipInlineWhitespace(value: string, index: number): number {\n let cursor = index;\n while (cursor < value.length) {\n const char = value[cursor];\n if (char !== ' ' && char !== '\\t' && char !== '\\n' && char !== '\\r') break;\n cursor += 1;\n }\n return cursor;\n}\n\nfunction callHasStateLikeStringArgument(code: string, openParenIndex: number): boolean {\n const closeParenIndex = findCallCloseParen(code, openParenIndex, 240);\n if (closeParenIndex === -1) return false;\n return containsStateLikeStringLiteral(code.slice(openParenIndex + 1, closeParenIndex));\n}\n\nfunction findCallCloseParen(code: string, openParenIndex: number, maxLength: number): number {\n const maxIndex = Math.min(code.length, openParenIndex + maxLength);\n let quote: string | null = null;\n let escaped = false;\n\n for (let index = openParenIndex + 1; index < maxIndex; index += 1) {\n const char = code[index]!;\n if (quote) {\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === '`') {\n quote = char;\n } else if (char === ')') {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction containsStateLikeStringLiteral(value: string): boolean {\n let quote: string | null = null;\n let literal = '';\n let escaped = false;\n\n for (const char of value) {\n if (!quote) {\n if (char === \"'\" || char === '\"' || char === '`') {\n quote = char;\n literal = '';\n }\n continue;\n }\n\n if (escaped) {\n literal += char;\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n const lowerLiteral = literal.toLowerCase();\n if (lowerLiteral.includes('state') || lowerLiteral.includes('csrf')) return true;\n quote = null;\n } else {\n literal += char;\n }\n }\n\n return false;\n}\n\nfunction countAuthCallbackStateStorageSignals(code: string): number {\n return (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['getItem']) +\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['get', 'getAll'])\n );\n}\n\nfunction countAuthCallbackStateStorageClearSignals(code: string): number {\n return (\n countStateLikeMemberCalls(code, ['sessionStorage', 'localStorage'], ['removeItem']) +\n countStateLikeFunctionCalls(code, ['deleteCookie', 'clearCookie', 'removeCookie']) +\n countStateLikeMemberCalls(code, ['cookies', 'cookie', 'cookieStore'], ['delete', 'remove']) +\n countDocumentCookieStateClears(code)\n );\n}\n\nfunction countDocumentCookieStateClears(code: string): number {\n const lowerCode = code.toLowerCase();\n let count = 0;\n\n for (\n let index = lowerCode.indexOf('document.cookie');\n index !== -1;\n index = lowerCode.indexOf('document.cookie', index + 'document.cookie'.length)\n ) {\n const assignmentIndex = lowerCode.indexOf('=', index + 'document.cookie'.length);\n if (assignmentIndex === -1 || assignmentIndex - index > 48) continue;\n\n const endIndex = findCookieAssignmentEnd(lowerCode, assignmentIndex + 1);\n const assignment = lowerCode.slice(assignmentIndex + 1, endIndex);\n const mentionsStateToken = assignment.includes('state') || assignment.includes('csrf');\n const expiresImmediately =\n assignment.includes('max-age=0') ||\n assignment.includes('max-age = 0') ||\n assignment.includes('thu, 01 jan 1970');\n\n if (mentionsStateToken && expiresImmediately) {\n count += 1;\n }\n }\n\n return count;\n}\n\nfunction findCookieAssignmentEnd(code: string, startIndex: number): number {\n const maxIndex = Math.min(code.length, startIndex + 320);\n for (let index = startIndex; index < maxIndex; index += 1) {\n const char = code[index];\n if (char === '\\n' || char === '\\r') return index;\n }\n return maxIndex;\n}\n\nfunction countAuthCallbackUrlScrubSignals(code: string): number {\n const patterns = [\n /\\bhistory\\.replaceState\\s*\\(/gi,\n /\\brouter\\.replace\\s*\\(/gi,\n /\\bwindow\\.history\\.replaceState\\s*\\(/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?!\\/)[^'\"`]*['\"`]/gi,\n /\\bwindow\\.location\\.replace\\s*\\(\\s*['\"`]\\/(?!\\/)[^'\"`]*['\"`]/gi,\n /\\b(?:window\\.)?location\\.hash\\s*=\\s*['\"`]\\s*['\"`]/gi,\n ];\n\n return patterns.reduce((total, pattern) => total + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthExitSignals(code: string): number {\n const patterns = [\n /\\b(?:log\\s*out|logout|sign\\s*out|signout|sign-out)\\b/i,\n /\\b(?:supabase\\.auth\\.signOut|auth\\.signOut|session\\.signOut)\\s*\\(/,\n /\\/(?:logout|signout|sign-out)\\b/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthSessionTeardownSignals(code: string): number {\n const patterns = [\n /\\b(?:supabase\\.auth\\.signOut|auth\\.signOut|session\\.signOut)\\s*\\(/,\n /\\b(?:clearSession|resetSession|destroySession|invalidateSession|revokeSession|endSession|terminateSession|removeSession)\\s*\\(/,\n /\\b(?:deleteCookie|clearCookie|removeCookie)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:cookies?|cookieStore)\\.(?:delete|remove)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:localStorage|sessionStorage)\\.removeItem\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthStorageClearSignals(code: string): number {\n const patterns = [\n /\\b(?:localStorage|sessionStorage)\\.removeItem\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:localStorage|sessionStorage)\\.clear\\s*\\(/,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCookieClearSignals(code: string): number {\n const patterns = [\n /\\b(?:deleteCookie|clearCookie|removeCookie)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\b(?:cookies?|cookieStore)\\.(?:delete|remove)\\s*\\(\\s*['\"`]?(?:auth|session|token|accessToken|refreshToken|user)[^'\"`)]*['\"`]?\\s*\\)/i,\n /\\bdocument\\.cookie\\s*=\\s*[^;\\n]*(?:auth|session|token|accessToken|refreshToken|user)[^;\\n]*(?:expires\\s*=\\s*Thu,\\s*01 Jan 1970|max-age\\s*=\\s*0)/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthCacheClientSignals(code: string): number {\n const patterns = [\n /from\\s+['\"`](?:@tanstack\\/react-query|react-query)['\"`]/gi,\n /\\b(?:useQueryClient|queryClient|QueryClient)\\b/g,\n /from\\s+['\"`]@apollo\\/client['\"`]/gi,\n /\\b(?:useApolloClient|apolloClient|ApolloClient|InMemoryCache)\\b/g,\n /from\\s+['\"`](?:urql|@urql\\/core)['\"`]/gi,\n /\\b(?:urqlClient|cacheExchange)\\b/g,\n /from\\s+['\"`]swr['\"`]/gi,\n /\\buseSWRConfig\\b/g,\n /\\bapi\\.util\\.resetApiState\\b/g,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCacheClearSignals(code: string): number {\n const patterns = [\n /\\b(?:queryClient|useQueryClient\\s*\\(\\s*\\))\\.(?:clear|removeQueries|resetQueries|invalidateQueries|cancelQueries)\\s*\\(/gi,\n /\\b(?:apolloClient|client)\\.(?:resetStore|clearStore|stop)\\s*\\(/gi,\n /\\b(?:cache|apolloClient\\.cache)\\.(?:evict|gc|modify)\\s*\\(/gi,\n /\\b(?:mutate|useSWRConfig\\s*\\(\\s*\\)\\.mutate)\\s*\\([^,\\n]+,\\s*(?:undefined|null|false)\\b/gi,\n /\\b(?:dispatch|store\\.dispatch)\\s*\\(\\s*api\\.util\\.resetApiState\\s*\\(\\s*\\)\\s*\\)/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRefreshSignals(code: string): number {\n let count = 0;\n\n if (\n /\\b(?:setInterval|setTimeout)\\s*\\(/i.test(code) &&\n /\\b(?:refreshSession|refreshToken|renewSession|getSession|startAutoRefresh)\\b/i.test(code)\n ) {\n count += 1;\n }\n\n if (/\\b(?:supabase\\.auth|auth)\\.onAuthStateChange\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n if (/\\bstartAutoRefresh\\s*\\(/i.test(code)) {\n count += 1;\n }\n\n return count;\n}\n\nfunction countAuthRefreshClearSignals(code: string): number {\n const patterns = [\n /\\bclearInterval\\s*\\(/gi,\n /\\bclearTimeout\\s*\\(/gi,\n /\\b(?:subscription|authSubscription|authListener)\\.unsubscribe\\s*\\(/gi,\n /\\bstopAutoRefresh\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRealtimeSignals(code: string): number {\n const patterns = [\n /\\bnew\\s+WebSocket\\s*\\(/gi,\n /\\bnew\\s+EventSource\\s*\\(/gi,\n /\\bsupabase\\.channel\\s*\\(/gi,\n /\\bpusher\\.subscribe\\s*\\(/gi,\n /\\becho\\.(?:private|channel|join)\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthRealtimeClearSignals(code: string): number {\n const patterns = [\n /\\b(?:socket|ws|channel|subscription|realtime|eventSource)\\.(?:close|disconnect|unsubscribe|remove|stop)\\s*\\(/gi,\n /\\bsupabase\\.removeChannel\\s*\\(/gi,\n /\\bpusher\\.unsubscribe\\s*\\(/gi,\n /\\becho\\.(?:leave|leaveChannel|disconnect)\\s*\\(/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCoordinationSignals(code: string): number {\n const patterns = [\n /\\bnew\\s+BroadcastChannel\\s*\\(/gi,\n /\\b(?:window\\.)?addEventListener\\s*\\(\\s*['\"`]storage['\"`]/gi,\n /\\b(?:window\\.)?onstorage\\s*=/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthCoordinationClearSignals(code: string): number {\n const patterns = [\n /\\b(?:auth|session|sync|broadcast)[A-Za-z0-9_$]*\\.close\\s*\\(/gi,\n /\\b(?:window\\.)?removeEventListener\\s*\\(\\s*['\"`]storage['\"`]/gi,\n /\\b(?:window\\.)?onstorage\\s*=\\s*null\\b/gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAuthEntrySignals(code: string): number {\n const patterns = [\n /\\b(?:signIn|signin|logIn|login|register|signUp|signup|createAccount|forgotPassword|resetPassword)\\s*\\(/i,\n />\\s*(?:sign in|log in|register|sign up|create account|forgot password|reset password)\\s*</i,\n /\\b(?:type|autoComplete|autocomplete)\\s*=\\s*[\"'{](?:email|username|current-password|new-password|password)/i,\n /<form\\b/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countSignInFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:signIn|signin|logIn|login)\\s*\\(/i,\n />\\s*(?:sign in|log in)\\s*</i,\n /\\bcurrent-password\\b/i,\n /(?:^|\\/)(?:login|log-?in|sign-?in)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countRecoveryFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:forgotPassword|resetPassword|sendPasswordReset|requestPasswordReset|recoverAccount|recoverPassword)\\s*\\(/i,\n />\\s*(?:forgot password|reset password|recover account)\\s*</i,\n /\\bnew-password\\b/i,\n /(?:^|\\/)(?:forgot-password|reset-password|password-reset|recover|recovery)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countSignUpFlowSignals(code: string, filePath: string): number {\n const patterns = [\n /\\b(?:signUp|signup|register|createAccount)\\s*\\(/i,\n />\\s*(?:sign up|register|create account)\\s*</i,\n /(?:^|\\/)(?:signup|sign-up|register)(?:\\/|\\.|$)/i,\n ];\n\n return patterns.reduce(\n (count, pattern) => count + (pattern.test(code) || pattern.test(filePath) ? 1 : 0),\n 0,\n );\n}\n\nfunction countProtectedSurfaceSignals(code: string): number {\n const patterns = [\n /['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\b(?:navigate|redirect|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthProtectedRedirectSignals(code: string): number {\n const patterns = [\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(\\s*['\"`]\\/(?:app|dashboard|workspace|settings|billing|account|profile|admin)(?:\\/[^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nfunction countAuthAnonymousRedirectSignals(code: string): number {\n const patterns = [\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/i,\n /\\bNextResponse\\.redirect\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register|forgot-password|reset-password)?(?:[/?#][^'\"`]*)?['\"`]/i,\n ];\n\n return patterns.reduce((count, pattern) => count + (pattern.test(code) ? 1 : 0), 0);\n}\n\nconst OPEN_REDIRECT_QUERY_KEY_PATTERN = String.raw`next|redirect(?:To|[_-]to)?|return(?:To|[_-]to)?|callback(?:Url|[_-]url)?|continue(?:Url|[_-]url)?|from`;\nconst OPEN_REDIRECT_SOURCE_PATTERN = String.raw`\\b(?:searchParams|(?:request|req)\\.nextUrl\\.searchParams|url\\.searchParams)\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)|\\b(?:router\\.query|route\\.query|query)\\.(?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})\\b|\\b(?:new\\s+)?URLSearchParams\\s*\\(\\s*(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:search|hash)(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\s*\\)\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)|\\bnew\\s+URL\\(\\s*(?:request|req)\\.url\\s*\\)\\.searchParams\\.get\\s*\\(\\s*['\"\\`](?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})['\"\\`]\\s*\\)`;\nconst OPEN_REDIRECT_SOURCE_REGEX = new RegExp(OPEN_REDIRECT_SOURCE_PATTERN, 'i');\nconst OPEN_REDIRECT_QUERY_KEY_REGEX = new RegExp(`^(?:${OPEN_REDIRECT_QUERY_KEY_PATTERN})$`, 'i');\nconst OPEN_REDIRECT_QUERY_CARRIER_REGEX = /\\b(?:searchParams|router\\.query|route\\.query|query)\\b/i;\nconst OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX = /\\b(?:router|route)\\b/i;\nconst LOCATION_QUERY_SOURCE_REGEX =\n /\\b(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:search|hash)(?:\\.slice\\(\\s*1\\s*\\)|\\.replace\\([^)]*\\))?\\b/i;\nconst LOCATION_URL_INPUT_REGEX =\n /\\b(?:(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:href|search|hash)|(?:request|req)\\.url)\\b/i;\nconst LOCATION_URL_SOURCE_REGEX =\n /\\bnew\\s+URL\\(\\s*(?:(?:(?:window|globalThis|document|self|parent|top)\\.)?location\\.(?:href|search|hash)|(?:request|req)\\.url)\\s*\\)/i;\nconst NEXT_URL_SOURCE_REGEX = /\\b(?:request|req)\\.nextUrl\\b/i;\nconst REQUEST_OBJECT_SOURCE_REGEX = /\\b(?:request|req)\\b/i;\n\nfunction countAuthOpenRedirectSignals(code: string): number {\n const patterns = [\n new RegExp(\n String.raw`\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*[^)]*(?:${OPEN_REDIRECT_SOURCE_PATTERN})[^)]*\\)`,\n 'gi',\n ),\n new RegExp(\n String.raw`\\b(?:window|globalThis|document|self|parent|top)\\.location(?:\\.href)?\\s*=\\s*[^;\\n]*(?:${OPEN_REDIRECT_SOURCE_PATTERN})`,\n 'gi',\n ),\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction propertyPathLooksLikeOpenRedirectQueryCarrier(propertyPath: string[]): boolean {\n return propertyPath.length > 0 && OPEN_REDIRECT_QUERY_CARRIER_REGEX.test(propertyPath.join('.'));\n}\n\nfunction propertyPathLooksLikeOpenRedirectSearchParamsCarrier(propertyPath: string[]): boolean {\n return propertyPath.length > 0 && propertyPath[propertyPath.length - 1] === 'searchParams';\n}\n\nfunction propertyPathLooksLikeOpenRedirectQueryContainerBase(propertyPath: string[]): boolean {\n return (\n propertyPath.length > 0 && OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX.test(propertyPath.join('.'))\n );\n}\n\nfunction expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n namedPropertyAliases: Map<string, NamedPropertyAlias> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n seenFunctions: Set<string> = new Set(),\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n const namedFunctions = getCachedNamedFunctionLikeDeclarations(sourceFile);\n const directFunctionLike = resolveFunctionLikeHandler(expression, namedFunctions);\n const directFunctionKey = directFunctionLike ? getFunctionLikeCacheKey(directFunctionLike) : null;\n if (directFunctionLike && directFunctionKey && !seenFunctions.has(directFunctionKey)) {\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(directFunctionKey);\n return getFunctionLikeReturnExpressions(directFunctionLike).some((returnedExpression) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n returnedExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n );\n }\n\n if (\n ts.isBinaryExpression(expression) &&\n (expression.operatorToken.kind === ts.SyntaxKind.QuestionQuestionToken ||\n expression.operatorToken.kind === ts.SyntaxKind.BarBarToken)\n ) {\n return (\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.left,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.right,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isConditionalExpression(expression)) {\n return (\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.whenTrue,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.whenFalse,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isTemplateExpression(expression)) {\n return expression.templateSpans.some((span) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n span.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isTaggedTemplateExpression(expression)) {\n return expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.template,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isNewExpression(expression) &&\n expression.arguments &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n [\n 'String',\n 'atob',\n 'btoa',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(expression.expression.text) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeJsonParseHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeJsonParseHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n (ts.isIdentifier(expression.expression) || isMemberAccessExpression(expression.expression)) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeBufferFromHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'String',\n 'atob',\n 'btoa',\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ) &&\n expression.arguments.length > 0 &&\n expressionLooksLikeWindowObjectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'exec') &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expression.arguments.length > 2 &&\n expressionLooksLikeBufferFromHelper(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[1],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'from') &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Buffer' &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'at') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'shift') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'pop') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'find', 'findLast') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'filter') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'slice') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'reverse',\n 'toReversed',\n 'sort',\n 'toSorted',\n 'concat',\n 'flat',\n 'join',\n 'map',\n 'flatMap',\n 'splice',\n 'toSpliced',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'reduce', 'reduceRight') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'trim') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(\n expression.expression,\n 'trim',\n 'trimStart',\n 'trimLeft',\n 'trimEnd',\n 'trimRight',\n 'padStart',\n 'padEnd',\n 'repeat',\n 'replace',\n 'replaceAll',\n 'slice',\n 'split',\n 'substr',\n 'substring',\n 'toLowerCase',\n 'toUpperCase',\n 'toLocaleLowerCase',\n 'toLocaleUpperCase',\n 'toLocaleString',\n 'toString',\n 'toWellFormed',\n 'valueOf',\n 'normalize',\n 'match',\n 'matchAll',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'values', 'next') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'get', 'getAll') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n ts.isNumericLiteral(expression.argumentExpression) &&\n expression.argumentExpression.text === '1' &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'value') &&\n isCallLikeExpression(expression.expression.expression) &&\n isMemberAccessExpression(expression.expression.expression.expression) &&\n isMemberAccessNamed(expression.expression.expression.expression, 'next') &&\n isCallLikeExpression(expression.expression.expression.expression.expression) &&\n isMemberAccessExpression(expression.expression.expression.expression.expression.expression) &&\n isMemberAccessNamed(\n expression.expression.expression.expression.expression.expression,\n 'entries',\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression.expression.expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'value') &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Array' &&\n isPropertyNamed(expression.expression.name, 'from') &&\n expression.arguments.length > 0 &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.some(\n (element) =>\n ts.isSpreadElement(element) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n seenFunctions,\n );\n const functionLike = functionResolution?.functionLike ?? null;\n const functionKey = functionLike ? getFunctionLikeCacheKey(functionLike) : null;\n if (functionLike && functionKey && functionResolution && !seenFunctions.has(functionKey)) {\n const boundExpressions = bindFunctionLikeArguments(\n functionLike,\n expression.arguments,\n functionResolution.namedExpressions,\n );\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n return getFunctionLikeReturnExpressions(functionLike).some((returnedExpression) =>\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n returnedExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n );\n }\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'get', 'getAll') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryGetterFunction(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['get', 'getAll'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionContainsOpenRedirectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n namedPropertyAliases: Map<string, NamedPropertyAlias> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n seenFunctions: Set<string> = new Set(),\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (ts.isBinaryExpression(expression)) {\n return (\n expressionContainsOpenRedirectSource(\n expression.left,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.right,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isConditionalExpression(expression)) {\n return (\n expressionContainsOpenRedirectSource(\n expression.condition,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.whenTrue,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ) ||\n expressionContainsOpenRedirectSource(\n expression.whenFalse,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n }\n\n if (ts.isTemplateExpression(expression)) {\n return expression.templateSpans.some((span) =>\n expressionContainsOpenRedirectSource(\n span.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isTaggedTemplateExpression(expression)) {\n return expressionContainsOpenRedirectSource(\n expression.template,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n\n if (ts.isNewExpression(expression)) {\n return (expression.arguments ?? []).some((argument) =>\n expressionContainsOpenRedirectSource(\n argument,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (ts.isArrayLiteralExpression(expression)) {\n return expression.elements.some((element) => {\n if (ts.isSpreadElement(element)) {\n return expressionContainsOpenRedirectSource(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n return (\n ts.isExpression(element) &&\n expressionContainsOpenRedirectSource(\n element,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n );\n });\n }\n\n if (ts.isObjectLiteralExpression(expression)) {\n return expression.properties.some((property) => {\n if (ts.isPropertyAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n if (ts.isShorthandPropertyAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.name,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n if (ts.isSpreadAssignment(property)) {\n return expressionContainsOpenRedirectSource(\n property.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n }\n return false;\n });\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n const functionResolution = resolveTrackedOpenRedirectFunctionLike(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n );\n const functionLike = functionResolution?.functionLike ?? null;\n const functionKey = functionLike ? getFunctionLikeCacheKey(functionLike) : null;\n if (functionLike && functionKey && functionResolution && !seenFunctions.has(functionKey)) {\n const boundExpressions = bindFunctionLikeArguments(\n functionLike,\n expression.arguments,\n functionResolution.namedExpressions,\n );\n const nextSeenFunctions = new Set(seenFunctions);\n nextSeenFunctions.add(functionKey);\n if (\n getFunctionLikeReturnExpressions(functionLike).some((returnedExpression) =>\n expressionContainsOpenRedirectSource(\n returnedExpression,\n sourceFile,\n boundExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n nextSeenFunctions,\n ),\n )\n ) {\n return true;\n }\n }\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n isOpenRedirectQueryKeyExpression(\n getAliasedApplyArgumentExpression(expression.arguments[2], 0, namedExpressions, new Set()),\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'call') &&\n expression.arguments.length > 1 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[1], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'apply') &&\n isOpenRedirectQueryKeyExpression(\n getAliasedApplyArgumentExpression(expression.arguments[1], 0, namedExpressions, new Set()),\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectQueryGetterFunction(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'get') &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'getAll') &&\n expression.arguments.length > 0 &&\n isOpenRedirectQueryKeyExpression(expression.arguments[0], namedExpressions, seenIdentifiers) &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (isCallLikeExpression(expression)) {\n return expression.arguments.some((argument) =>\n expressionContainsOpenRedirectSource(\n argument,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n ),\n );\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n OPEN_REDIRECT_QUERY_KEY_REGEX.test(expression.name.text) &&\n expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n isOpenRedirectQueryKeyExpression(\n expression.argumentExpression,\n namedExpressions,\n seenIdentifiers,\n ) &&\n expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isElementLikeAccessExpression(expression) &&\n expressionContainsOpenRedirectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) {\n return false;\n }\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionContainsOpenRedirectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n seenFunctions,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n OPEN_REDIRECT_QUERY_KEY_REGEX.test(propertyAlias.propertyName) &&\n (expressionLooksLikeOpenRedirectQueryCarrier(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectQueryCarrier(propertyAlias.propertyPath.slice(0, -1)))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction isOpenRedirectQueryKeyExpression(\n expression: ts.Expression | undefined,\n namedExpressions: Map<string, ts.Expression> = new Map(),\n seenIdentifiers: Set<string> = new Set(),\n): boolean {\n const value = getExpressionLiteralValue(expression);\n if (typeof value === 'string' && OPEN_REDIRECT_QUERY_KEY_REGEX.test(value)) {\n return true;\n }\n\n if (!expression) return false;\n if (\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression) ||\n ts.isParenthesizedExpression(expression)\n ) {\n return isOpenRedirectQueryKeyExpression(\n expression.expression,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = isOpenRedirectQueryKeyExpression(initializer, namedExpressions, seenIdentifiers);\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectQueryCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_QUERY_CARRIER_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Object' &&\n isPropertyNamed(expression.expression.name, 'fromEntries') &&\n expression.arguments.length > 0\n ) {\n const entriesExpression = expression.arguments[0];\n if (\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n entriesExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n if (\n expressionLooksLikeOpenRedirectEntriesCarrier(\n entriesExpression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n if (isPropertyLikeAccessExpression(expression) && isPropertyNamed(expression.name, 'query')) {\n return expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n (propertyPathLooksLikeOpenRedirectQueryCarrier(propertyAlias.propertyPath) ||\n (propertyAlias.propertyName === 'query' &&\n (expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.propertyPath.slice(0, -1),\n ))))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectEntriesCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectEntriesCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isPropertyLikeAccessExpression(expression.expression) &&\n ts.isIdentifier(expression.expression.expression) &&\n expression.expression.expression.text === 'Array' &&\n isPropertyNamed(expression.expression.name, 'from') &&\n expression.arguments.length > 0 &&\n (expressionLooksLikeOpenRedirectEntriesCarrier(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n ts.isArrayLiteralExpression(expression) &&\n expression.elements.some(\n (element) =>\n ts.isSpreadElement(element) &&\n (expressionLooksLikeOpenRedirectEntriesCarrier(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n element.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )),\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'entries') &&\n expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectEntriesCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectQueryContainerBase(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (OPEN_REDIRECT_QUERY_CONTAINER_BASE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useRouter') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useRouter')))\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryContainerBase(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (!propertyAlias) return false;\n if (propertyPathLooksLikeOpenRedirectQueryContainerBase(propertyAlias.propertyPath)) {\n return true;\n }\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationQuerySource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_QUERY_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationQuerySource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'slice', 'substring', 'replace', 'trim') &&\n expressionLooksLikeLocationQuerySource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'search', 'hash') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationQuerySource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['search', 'hash'].includes(propertyAlias.propertyName) &&\n (expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeWindowObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isIdentifier(expression) &&\n ['window', 'globalThis', 'document', 'self', 'parent', 'top'].includes(expression.text)\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeWindowObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (isLocationObjectExpression(expression)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useLocation') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useLocation')))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'location') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'location' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeHistoryObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'history') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeHistoryObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'history') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeHistoryObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'history' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBufferObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Buffer') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBufferObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Buffer') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBufferObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Buffer' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBufferFromHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'from') &&\n expressionLooksLikeBufferObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBufferFromHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBufferFromHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBufferFromHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'from' &&\n expressionLooksLikeBufferObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'JSON') {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'JSON') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'JSON' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonStringifyHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'stringify') &&\n expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeJsonStringifyHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonStringifyHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonStringifyHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'stringify' &&\n expressionLooksLikeJsonObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeJsonParseHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'parse') &&\n expressionLooksLikeJsonObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeJsonParseHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeJsonParseHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeJsonParseHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'parse' &&\n expressionLooksLikeJsonObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeStructuredCloneHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'structuredClone') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'structuredClone') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeStructuredCloneHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeStructuredCloneHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeStructuredCloneHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'structuredClone' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalSymbolHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Symbol') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Symbol') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalSymbolHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalSymbolHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Symbol' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBigIntHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'BigInt') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'BigInt') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBigIntHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBigIntHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'BigInt' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBooleanHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Boolean') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Boolean') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBooleanHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBooleanHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Boolean' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalNumberHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Number') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Number') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalNumberHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalNumberHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Number' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalObjectHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'Object') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'Object') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalObjectHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalObjectHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'Object' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalStringHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && expression.text === 'String') {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'String') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalStringHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalStringHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'String' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalBase64Helper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (ts.isIdentifier(expression) && ['atob', 'btoa'].includes(expression.text)) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'atob', 'btoa') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalBase64Helper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalBase64Helper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['atob', 'btoa'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isIdentifier(expression) &&\n [\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(expression.text)\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(\n expression,\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ) &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind') &&\n expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeBrowserGlobalUriCodecHelper(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeBrowserGlobalUriCodecHelper(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n if (result) return true;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n [\n 'decodeURI',\n 'decodeURIComponent',\n 'encodeURI',\n 'encodeURIComponent',\n 'escape',\n 'unescape',\n ].includes(propertyAlias.propertyName) &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationUrlSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_URL_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'URL'\n ) {\n return expressionLooksLikeLocationUrlInput(\n expression.arguments?.[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationUrlSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationUrlInput(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (LOCATION_URL_INPUT_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationUrlInput(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n expressionLooksLikeNextUrlSource(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'String' &&\n expression.arguments.length > 0 &&\n (expressionLooksLikeLocationObjectSource(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'toString', 'toJSON') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'href', 'search', 'hash') &&\n (expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'url') &&\n expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationUrlInput(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['href', 'search', 'hash'].includes(propertyAlias.propertyName) &&\n (expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ))\n ) {\n return true;\n }\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'url' &&\n expressionLooksLikeRequestObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction expressionLooksLikeRequestObjectSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (REQUEST_OBJECT_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return false;\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeRequestObjectSource(\n initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeNextUrlSource(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (NEXT_URL_SOURCE_REGEX.test(expression.getText(sourceFile))) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'clone') &&\n expressionLooksLikeNextUrlSource(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n if (isPropertyLikeAccessExpression(expression) && isPropertyNamed(expression.name, 'nextUrl')) {\n return expressionLooksLikeRequestObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeNextUrlSource(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'nextUrl' &&\n expressionLooksLikeRequestObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n const text = expression.getText(sourceFile);\n if (/\\b(?:searchParams|(?:request|req)\\.nextUrl\\.searchParams|url\\.searchParams)\\b/i.test(text)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeOpenRedirectSearchParamsCarrier(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n ts.isNewExpression(expression) &&\n ts.isIdentifier(expression.expression) &&\n expression.expression.text === 'URLSearchParams'\n ) {\n return expressionLooksLikeLocationQuerySource(\n expression.arguments?.[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n ((ts.isIdentifier(expression.expression) && expression.expression.text === 'useSearchParams') ||\n (isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'useSearchParams')))\n ) {\n return true;\n }\n\n if (\n isPropertyLikeAccessExpression(expression) &&\n isPropertyNamed(expression.name, 'searchParams')\n ) {\n return (\n expressionLooksLikeLocationUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeOpenRedirectSearchParamsCarrier(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'searchParams' &&\n (expressionLooksLikeLocationUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n expressionLooksLikeNextUrlSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n ) ||\n propertyPathLooksLikeOpenRedirectSearchParamsCarrier(propertyAlias.propertyPath))\n ) {\n return true;\n }\n return false;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationAssignmentTarget(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n if (isLocationAssignmentTarget(expression)) {\n return true;\n }\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationAssignmentTarget(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'href') &&\n expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n )\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction expressionLooksLikeLocationMutationCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeLocationMutationCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeLocationMutationCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['assign', 'replace'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeLocationObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n expression &&\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'assign', 'replace') &&\n expressionLooksLikeLocationObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeWindowOpenCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeWindowOpenCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeWindowOpenCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression) && expression.text === 'open') {\n return true;\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeWindowOpenCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n propertyAlias.propertyName === 'open' &&\n expressionLooksLikeWindowObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n new Set(),\n )\n ) {\n return true;\n }\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'open') &&\n expressionLooksLikeWindowObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeHistoryMutationCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeHistoryMutationCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeHistoryMutationCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (\n propertyAlias &&\n ['pushState', 'replaceState'].includes(propertyAlias.propertyName) &&\n expressionLooksLikeHistoryObjectSource(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n isMemberAccessNamed(expression, 'pushState', 'replaceState') &&\n expressionLooksLikeHistoryObjectSource(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ),\n );\n}\n\nfunction expressionLooksLikeRouteTransitionCall(\n expression: ts.Expression | undefined,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n seenIdentifiers: Set<string>,\n): boolean {\n if (!expression) return false;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (isMemberAccessExpression(expression) && isMemberAccessNamed(expression, 'call', 'apply')) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (\n isCallLikeExpression(expression) &&\n isMemberAccessExpression(expression.expression) &&\n isMemberAccessNamed(expression.expression, 'bind')\n ) {\n return expressionLooksLikeRouteTransitionCall(\n expression.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (['redirect', 'navigate'].includes(expression.text)) {\n return true;\n }\n if (seenIdentifiers.has(expression.text)) return false;\n const initializer = namedExpressions.get(expression.text);\n if (initializer) {\n seenIdentifiers.add(expression.text);\n const result = expressionLooksLikeRouteTransitionCall(\n initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n const propertyAlias = namedPropertyAliases.get(expression.text);\n if (propertyAlias && ['redirect', 'navigate'].includes(propertyAlias.propertyName)) {\n return true;\n }\n if (\n propertyAlias &&\n ['push', 'replace'].includes(propertyAlias.propertyName) &&\n (propertyPathLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.propertyPath.slice(0, -1),\n ) ||\n expressionLooksLikeOpenRedirectQueryContainerBase(\n propertyAlias.initializer,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ))\n ) {\n return true;\n }\n return false;\n }\n\n return Boolean(\n isMemberAccessExpression(expression) &&\n (isMemberAccessNamed(expression, 'redirect', 'navigate') ||\n (isMemberAccessNamed(expression, 'push', 'replace') &&\n expressionLooksLikeOpenRedirectQueryContainerBase(\n expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n ))),\n );\n}\n\nfunction getRouteTransitionTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeRouteTransitionCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeRouteTransitionCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeRouteTransitionCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeHistoryMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[3];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeHistoryMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 2, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeHistoryMutationCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 2, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeRouteTransitionCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n if (\n expressionLooksLikeHistoryMutationCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[2];\n }\n\n return undefined;\n}\n\nfunction getAliasedApplyArgumentExpression(\n expression: ts.Expression | undefined,\n index: number,\n namedExpressions: Map<string, ts.Expression>,\n seenIdentifiers: Set<string>,\n): ts.Expression | undefined {\n if (!expression) return undefined;\n\n if (\n ts.isParenthesizedExpression(expression) ||\n ts.isAsExpression(expression) ||\n ts.isTypeAssertionExpression(expression) ||\n ts.isNonNullExpression(expression)\n ) {\n return getAliasedApplyArgumentExpression(\n expression.expression,\n index,\n namedExpressions,\n seenIdentifiers,\n );\n }\n\n if (ts.isIdentifier(expression)) {\n if (seenIdentifiers.has(expression.text)) return undefined;\n const initializer = namedExpressions.get(expression.text);\n if (!initializer) return undefined;\n seenIdentifiers.add(expression.text);\n const result = getAliasedApplyArgumentExpression(\n initializer,\n index,\n namedExpressions,\n seenIdentifiers,\n );\n seenIdentifiers.delete(expression.text);\n return result;\n }\n\n if (!ts.isArrayLiteralExpression(expression)) return undefined;\n const argument = expression.elements[index];\n return ts.isExpression(argument) ? argument : undefined;\n}\n\nfunction getLocationMutationTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeLocationMutationCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeLocationMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeLocationMutationCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeLocationMutationCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n return undefined;\n}\n\nfunction getWindowOpenTargetExpression(\n node: CallLikeExpression,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): ts.Expression | undefined {\n if (\n isMemberAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'Reflect' &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeWindowOpenCall(\n node.arguments[0],\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[2], 0, namedExpressions, new Set());\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'call') &&\n expressionLooksLikeWindowOpenCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[1];\n }\n\n if (\n isMemberAccessExpression(node.expression) &&\n isMemberAccessNamed(node.expression, 'apply') &&\n expressionLooksLikeWindowOpenCall(\n node.expression.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return getAliasedApplyArgumentExpression(node.arguments[1], 0, namedExpressions, new Set());\n }\n\n if (\n expressionLooksLikeWindowOpenCall(\n node.expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n )\n ) {\n return node.arguments[0];\n }\n\n return undefined;\n}\n\nfunction countAuthRecoveryRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:forgot-password|reset-password|password-reset|recover)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:forgot password|reset password|recover account)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countRegistrationRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:signup|sign-up|register)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:sign up|register|create account)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countAnonymousEntryRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in|sign-?up|register)?(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:back to sign in|back to login|return to sign in|return to login|sign in|log in)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countSignInRouteSignals(code: string): number {\n const patterns = [\n /\\b(?:href|to|route|path)\\s*[:=]\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\b(?:redirect|navigate|push|replace)\\s*\\(\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n /\\bwindow\\.location(?:\\.href)?\\s*=\\s*['\"`]\\/(?:auth|login|log-?in|sign-?in)(?:[/?#][^'\"`]*)?['\"`]/gi,\n />\\s*(?:back to sign in|back to login|return to sign in|return to login|sign in|log in)\\s*</gi,\n ];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countHardcodedSecretSignals(code: string): number {\n const patterns = [/\\bsk_live_[0-9A-Za-z]+\\b/g, /-----BEGIN [A-Z ]*PRIVATE KEY-----/g];\n\n return patterns.reduce((count, pattern) => count + (code.match(pattern)?.length ?? 0), 0);\n}\n\nfunction countClientSecretEnvReferenceSignals(code: string): number {\n const useClientCount = /^\\s*['\"]use client['\"]/m.test(code)\n ? countSensitiveEnvReferences(code, ['process.env.'])\n : 0;\n\n return (\n countSensitiveEnvReferences(code, ['import.meta.env.', 'process.env.NEXT_PUBLIC_']) +\n useClientCount\n );\n}\n\nfunction countSensitiveEnvReferences(code: string, prefixes: string[]): number {\n let count = 0;\n\n for (const prefix of prefixes) {\n for (\n let index = code.indexOf(prefix);\n index !== -1;\n index = code.indexOf(prefix, index + prefix.length)\n ) {\n const envName = readEnvIdentifier(code, index + prefix.length);\n if (envName && isSensitiveEnvName(envName)) {\n count += 1;\n }\n }\n }\n\n return count;\n}\n\nfunction readEnvIdentifier(code: string, startIndex: number): string {\n let cursor = startIndex;\n while (cursor < code.length && isEnvIdentifierChar(code[cursor]!)) {\n cursor += 1;\n }\n return code.slice(startIndex, cursor);\n}\n\nfunction isEnvIdentifierChar(char: string): boolean {\n const codePoint = char.charCodeAt(0);\n return (\n char === '_' || (codePoint >= 48 && codePoint <= 57) || (codePoint >= 65 && codePoint <= 90)\n );\n}\n\nfunction isSensitiveEnvName(envName: string): boolean {\n return (\n envName.includes('SERVICE_ROLE') ||\n envName.includes('SECRET') ||\n envName.includes('PRIVATE_KEY')\n );\n}\n\nfunction countLocalhostEndpointSignals(code: string): number {\n return (\n code.match(\n /\\b(?:(?:https?|wss?):\\/\\/)?(?:localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)(?::\\d+)?(?:\\/[^\\s'\"`]*)?/gi,\n )?.length ?? 0\n );\n}\n\nfunction countWildcardPostMessageSignals(code: string): number {\n return code.match(/\\bpostMessage\\s*\\([^)]*,\\s*['\"`]\\*['\"`]/g)?.length ?? 0;\n}\n\nconst DYNAMIC_GEOMETRY_STYLE_PROPS = new Set([\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'inset',\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'transform',\n 'transformOrigin',\n 'opacity',\n 'offsetPath',\n 'offsetDistance',\n 'cx',\n 'cy',\n 'x',\n 'y',\n]);\n\nfunction getJsxAttributeExpression(\n initializer: ts.JsxAttribute['initializer'],\n): ts.Expression | null {\n if (!initializer || !ts.isJsxExpression(initializer)) return null;\n return initializer.expression ?? null;\n}\n\nfunction getStylePropertyName(name: ts.PropertyName): string | null {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n if (ts.isComputedPropertyName(name)) {\n return getExpressionLiteralValue(name.expression);\n }\n return null;\n}\n\nfunction unwrapStyleExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (\n ts.isParenthesizedExpression(current) ||\n ts.isAsExpression(current) ||\n ts.isTypeAssertionExpression(current) ||\n ts.isNonNullExpression(current) ||\n ts.isSatisfiesExpression(current)\n ) {\n current = current.expression;\n }\n return current;\n}\n\nfunction isDynamicStyleValue(expression: ts.Expression): boolean {\n const unwrapped = unwrapStyleExpression(expression);\n if (\n ts.isStringLiteral(unwrapped) ||\n ts.isNoSubstitutionTemplateLiteral(unwrapped) ||\n ts.isNumericLiteral(unwrapped) ||\n unwrapped.kind === ts.SyntaxKind.TrueKeyword ||\n unwrapped.kind === ts.SyntaxKind.FalseKeyword ||\n unwrapped.kind === ts.SyntaxKind.NullKeyword\n ) {\n return false;\n }\n return true;\n}\n\nfunction isAllowedInlineStyleObject(objectLiteral: ts.ObjectLiteralExpression): boolean {\n let sawGeometryProperty = false;\n let sawDynamicGeometryValue = false;\n\n for (const property of objectLiteral.properties) {\n if (!ts.isPropertyAssignment(property)) return false;\n\n const propertyName = getStylePropertyName(property.name);\n if (!propertyName) return false;\n\n if (propertyName.startsWith('--d-')) {\n continue;\n }\n\n if (!DYNAMIC_GEOMETRY_STYLE_PROPS.has(propertyName)) {\n return false;\n }\n\n sawGeometryProperty = true;\n if (isDynamicStyleValue(property.initializer)) {\n sawDynamicGeometryValue = true;\n }\n }\n\n return !sawGeometryProperty || sawDynamicGeometryValue;\n}\n\nfunction isAllowedInlineStyleAttribute(\n attribute: ts.JsxAttribute,\n sourceFile: ts.SourceFile,\n namedExpressions: Map<string, ts.Expression>,\n namedPropertyAliases: Map<string, NamedPropertyAlias>,\n): boolean {\n const expression = getJsxAttributeExpression(attribute.initializer);\n if (!expression) return false;\n\n const resolved = resolveObjectLiteralExpression(\n expression,\n sourceFile,\n namedExpressions,\n namedPropertyAliases,\n new Set(),\n );\n\n return resolved ? isAllowedInlineStyleObject(resolved.objectLiteral) : false;\n}\n\nfunction analyzeAstSignals(filePath: string, code: string): AstCritiqueSignals {\n const sourceFile = ts.createSourceFile(\n filePath,\n code,\n ts.ScriptTarget.Latest,\n true,\n getScriptKind(filePath),\n );\n const signals: AstCritiqueSignals = {\n inlineStyleAttributeCount: 0,\n dangerousHtmlCount: 0,\n rawHtmlInjectionCount: 0,\n dynamicEvalCount: 0,\n hardcodedSecretSignalCount: countHardcodedSecretSignals(code),\n clientSecretEnvReferenceCount: countClientSecretEnvReferenceSignals(code),\n localhostEndpointCount: countLocalhostEndpointSignals(code),\n wildcardPostMessageCount: countWildcardPostMessageSignals(code),\n windowOpenWithoutNoopenerCount: 0,\n messageListenerWithoutOriginCheckCount: 0,\n externalIframeWithoutSandboxCount: 0,\n insecureExternalIframeCount: 0,\n insecureFormActionCount: 0,\n insecureAuthFormMethodCount: 0,\n insecureTransportEndpointCount: 0,\n iconOnlyButtonWithoutLabelCount: 0,\n iconOnlyLinkWithoutLabelCount: 0,\n clickableNonSemanticCount: 0,\n imageWithoutAltCount: 0,\n insecureExternalImageCount: 0,\n iframeWithoutTitleCount: 0,\n dialogWithoutLabelCount: 0,\n dialogWithoutModalHintCount: 0,\n tableWithoutHeaderCount: 0,\n tableWithoutCaptionCount: 0,\n unlabeledNavigationLandmarkCount: 0,\n multipleMainLandmarkCount: 0,\n externalBlankLinkWithoutRelCount: 0,\n formControlWithoutLabelCount: 0,\n placeholderNavigationTargetCount: 0,\n protectedSurfaceSignalCount: countProtectedSurfaceSignals(code),\n skipNavSignalCount: countSkipNavSignals(code),\n skipNavTargetIds: [],\n mainLandmarkCount: 0,\n mainLandmarkIds: [],\n emailAutocompleteMissingCount: 0,\n passwordAutocompleteMissingCount: 0,\n otpAutocompleteMissingCount: 0,\n authAutocompleteDisabledCount: 0,\n authAutocompleteSemanticMismatchCount: 0,\n authInputTypeMismatchCount: 0,\n authInputWithoutNameCount: 0,\n buttonInFormWithoutTypeCount: 0,\n authFormWithoutSubmitCount: 0,\n authEntrySignalCount: countAuthEntrySignals(code),\n authSessionSignalCount: countAuthSessionSignals(code),\n authLoadingSignalCount: countAuthLoadingSignals(code),\n authProtectedLoadingRenderCount: countAuthProtectedLoadingRenderSignals(code),\n authBlankLoadingRenderCount: countAuthBlankLoadingRenderSignals(code),\n authAnonymousLoadingRedirectCount: countAuthAnonymousLoadingRedirectSignals(code),\n authProtectedUnauthenticatedRenderCount: countAuthProtectedUnauthenticatedRenderSignals(code),\n authProtectedRedirectSignalCount: countAuthProtectedRedirectSignals(code),\n authAnonymousRedirectSignalCount: countAuthAnonymousRedirectSignals(code),\n authOpenRedirectSignalCount: countAuthOpenRedirectSignals(code),\n authExternalRedirectSignalCount: 0,\n authProviderStateMissingCount: 0,\n authProviderPkceMissingCount: 0,\n authProviderNonceMissingCount: 0,\n authStorageWriteCount: 0,\n authStorageClearCount: countAuthStorageClearSignals(code),\n authCookieWriteCount: 0,\n authCookieClearCount: countAuthCookieClearSignals(code),\n authCookieMissingHardeningCount: 0,\n authHeaderWriteCount: 0,\n authHeaderClearCount: 0,\n authCacheClientCount: countAuthCacheClientSignals(code),\n authCacheClearCount: countAuthCacheClearSignals(code),\n authRefreshSignalCount: countAuthRefreshSignals(code),\n authRefreshClearCount: countAuthRefreshClearSignals(code),\n authGuardSignalCount: countAuthGuardSignals(code),\n authExitSignalCount: countAuthExitSignals(code),\n authSessionTeardownSignalCount: countAuthSessionTeardownSignals(code),\n };\n const namedFunctionDeclarations = collectNamedFunctionLikeDeclarations(sourceFile);\n const namedExpressionInitializers = collectNamedExpressionInitializers(sourceFile);\n const namedPropertyAliases = collectNamedPropertyAliases(sourceFile);\n const labelForIds = collectLabelForIds(sourceFile);\n let navigationLandmarkCount = 0;\n let unlabeledNavigationLandmarkCount = 0;\n\n const walk = (node: ts.Node) => {\n if (ts.isJsxAttribute(node)) {\n if (isPropertyNamed(node.name, 'style') && node.initializer) {\n if (\n !isAllowedInlineStyleAttribute(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.inlineStyleAttributeCount += 1;\n }\n }\n if (\n isPropertyNamed(node.name, 'dangerouslySetInnerHTML') &&\n !isSafeJsonLdDangerouslySetInnerHtml(node)\n ) {\n signals.dangerousHtmlCount += 1;\n }\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n node.initializer &&\n ts.isJsxExpression(node.initializer) &&\n expressionContainsOpenRedirectSource(\n node.initializer.expression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderUrlMissingState(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderStateMissingCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderCodeFlowMissingPkce(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderPkceMissingCount += 1;\n }\n\n if (\n isPropertyNamed(node.name, 'href', 'to') &&\n isAuthProviderIdTokenFlowMissingNonce(getJsxAttributeLiteralValue(node))\n ) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isPropertyNamed(node.left.name, 'innerHTML', 'outerHTML')\n ) {\n signals.rawHtmlInjectionCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n expressionContainsOpenRedirectSource(\n node.right,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.right))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isExternalUrl(getExpressionLiteralValue(node.right))\n ) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(getExpressionLiteralValue(node.right))) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(getExpressionLiteralValue(node.right))) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(getExpressionLiteralValue(node.right))) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n expressionLooksLikeLocationAssignmentTarget(\n node.left,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n expressionContainsOpenRedirectSource(\n node.right,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isPropertyNamed(node.left.name, 'onmessage')\n ) {\n const handler = resolveFunctionLikeHandler(node.right, namedFunctionDeclarations);\n if (handler && !functionLikeReferencesOrigin(handler)) {\n signals.messageListenerWithoutOriginCheckCount += 1;\n }\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isPropertyAccessExpression(node.left) &&\n isBrowserStorageObject(node.left.expression) &&\n /(?:token|auth|jwt|session)/i.test(node.left.name.text)\n ) {\n signals.authStorageWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n ts.isElementAccessExpression(node.left) &&\n isBrowserStorageObject(node.left.expression) &&\n isAuthStorageKeyLiteral(node.left.argumentExpression)\n ) {\n signals.authStorageWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n isCookiePropertyAccess(node.left) &&\n hasAuthCredentialText(node.right, sourceFile)\n ) {\n signals.authCookieWriteCount += 1;\n }\n\n if (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n isAuthorizationHeaderAccess(node.left)\n ) {\n if (isHeaderClearValue(node.right)) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n\n if (ts.isPropertyAssignment(node) && isAuthorizationHeaderName(node.name)) {\n if (isHeaderClearValue(node.initializer)) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n\n if (ts.isDeleteExpression(node) && isAuthorizationHeaderAccess(node.expression)) {\n signals.authHeaderClearCount += 1;\n }\n\n if (isCallLikeExpression(node)) {\n const firstArgumentLiteral = getExpressionLiteralValue(node.arguments[0]);\n const secondArgumentLiteral = getExpressionLiteralValue(node.arguments[1]);\n const routeTransitionTargetExpression = getRouteTransitionTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const routeTransitionTargetLiteral = getExpressionLiteralValue(\n routeTransitionTargetExpression,\n );\n const locationMutationTargetExpression = getLocationMutationTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const locationMutationTargetLiteral = getExpressionLiteralValue(\n locationMutationTargetExpression,\n );\n const windowOpenTargetExpression = getWindowOpenTargetExpression(\n node,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n );\n const windowOpenTargetLiteral = getExpressionLiteralValue(windowOpenTargetExpression);\n if (ts.isIdentifier(node.expression) && node.expression.text === 'eval') {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n ((ts.isIdentifier(node.expression) &&\n ['setTimeout', 'setInterval'].includes(node.expression.text)) ||\n (ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'window' &&\n isPropertyNamed(node.expression.name, 'setTimeout', 'setInterval'))) &&\n typeof firstArgumentLiteral === 'string'\n ) {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n (isFetchLikeCall(node) || isAxiosLikeCall(node)) &&\n isInsecureTransportUrl(firstArgumentLiteral)\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n routeTransitionTargetExpression &&\n expressionContainsOpenRedirectSource(\n routeTransitionTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n expressionLooksLikeRouteTransitionCall(\n node.expression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n new Set(),\n ) &&\n isExternalUrl(routeTransitionTargetLiteral ?? firstArgumentLiteral)\n ) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(routeTransitionTargetLiteral ?? firstArgumentLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (\n isAuthProviderCodeFlowMissingPkce(routeTransitionTargetLiteral ?? firstArgumentLiteral)\n ) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (\n isAuthProviderIdTokenFlowMissingNonce(\n routeTransitionTargetLiteral ?? firstArgumentLiteral,\n )\n ) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n isAxiosConfigCall(node) &&\n isInsecureTransportUrl(\n getObjectLiteralStringPropertyValue(node.arguments[0], 'url', 'baseURL', 'baseUrl'),\n )\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n locationMutationTargetExpression &&\n expressionContainsOpenRedirectSource(\n locationMutationTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (\n locationMutationTargetExpression &&\n isInsecureTransportUrl(locationMutationTargetLiteral)\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (locationMutationTargetExpression && isExternalUrl(locationMutationTargetLiteral)) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(locationMutationTargetLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(locationMutationTargetLiteral)) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(locationMutationTargetLiteral)) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n windowOpenTargetExpression &&\n expressionContainsOpenRedirectSource(\n windowOpenTargetExpression,\n sourceFile,\n namedExpressionInitializers,\n namedPropertyAliases,\n )\n ) {\n signals.authOpenRedirectSignalCount += 1;\n }\n\n if (windowOpenTargetExpression && isExternalUrl(windowOpenTargetLiteral)) {\n signals.authExternalRedirectSignalCount += 1;\n if (isAuthProviderUrlMissingState(windowOpenTargetLiteral)) {\n signals.authProviderStateMissingCount += 1;\n }\n if (isAuthProviderCodeFlowMissingPkce(windowOpenTargetLiteral)) {\n signals.authProviderPkceMissingCount += 1;\n }\n if (isAuthProviderIdTokenFlowMissingNonce(windowOpenTargetLiteral)) {\n signals.authProviderNonceMissingCount += 1;\n }\n }\n\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'postMessage') &&\n secondArgumentLiteral === '*'\n ) {\n signals.wildcardPostMessageCount += 1;\n }\n\n if (isAddEventListenerCall(node) && firstArgumentLiteral === 'message') {\n const handler = resolveFunctionLikeHandler(node.arguments[1], namedFunctionDeclarations);\n if (handler && !functionLikeReferencesOrigin(handler)) {\n signals.messageListenerWithoutOriginCheckCount += 1;\n }\n }\n\n if (\n ts.isPropertyAccessExpression(node.expression) &&\n isPropertyNamed(node.expression.name, 'setHeader', 'append', 'set') &&\n isSetCookieHeaderName(node.arguments[0])\n ) {\n const cookieStrings = collectCookieHeaderStrings(node.arguments[1]);\n const authCookieStrings = cookieStrings.filter(cookieHeaderStringLooksAuthLike);\n if (authCookieStrings.length > 0) {\n signals.authCookieWriteCount += authCookieStrings.length;\n signals.authCookieMissingHardeningCount += authCookieStrings.filter(\n (value) => !cookieHeaderStringHasHardening(value),\n ).length;\n } else {\n const cookieHeaderSource = node.arguments[1]?.getText(sourceFile) ?? '';\n if (cookieHeaderStringLooksAuthLike(cookieHeaderSource)) {\n signals.authCookieWriteCount += 1;\n if (!cookieHeaderStringHasHardening(cookieHeaderSource)) {\n signals.authCookieMissingHardeningCount += 1;\n }\n }\n }\n }\n\n if (\n ((ts.isIdentifier(node.expression) && node.expression.text === 'open') ||\n (ts.isPropertyAccessExpression(node.expression) &&\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'window' &&\n isPropertyNamed(node.expression.name, 'open'))) &&\n secondArgumentLiteral === '_blank'\n ) {\n const featureLiteral = getExpressionLiteralValue(node.arguments[2])?.toLowerCase() ?? '';\n if (!featureLiteral.includes('noopener') || !featureLiteral.includes('noreferrer')) {\n signals.windowOpenWithoutNoopenerCount += 1;\n }\n }\n\n if (ts.isPropertyAccessExpression(node.expression)) {\n if (isPropertyNamed(node.expression.name, 'insertAdjacentHTML')) {\n signals.rawHtmlInjectionCount += 1;\n }\n if (\n isBrowserStorageObject(node.expression.expression) &&\n isPropertyNamed(node.expression.name, 'setItem') &&\n isAuthStorageKeyLiteral(node.arguments[0])\n ) {\n signals.authStorageWriteCount += 1;\n }\n if (isCookieMutationSetCall(node)) {\n const firstArgument = node.arguments[0];\n const isObjectConfigCall = ts.isObjectLiteralExpression(firstArgument);\n const isAuthCookieWrite = isObjectConfigCall\n ? objectLiteralLooksLikeAuthCookieConfig(firstArgument, sourceFile)\n : expressionLooksLikeAuthCookieName(firstArgument, sourceFile);\n if (isAuthCookieWrite) {\n signals.authCookieWriteCount += 1;\n const hardeningSource = isObjectConfigCall ? firstArgument : node.arguments[2];\n if (!hasExplicitAuthCookieHardening(hardeningSource)) {\n signals.authCookieMissingHardeningCount += 1;\n }\n }\n }\n if (\n isPropertyNamed(node.expression.name, 'delete') &&\n node.arguments.length > 0 &&\n isAuthorizationHeaderName(node.arguments[0])\n ) {\n signals.authHeaderClearCount += 1;\n }\n if (\n (isPropertyNamed(node.expression.name, 'set') ||\n isPropertyNamed(node.expression.name, 'append')) &&\n node.arguments.length > 0 &&\n isAuthorizationHeaderName(node.arguments[0])\n ) {\n if (isHeaderClearValue(node.arguments[1])) {\n signals.authHeaderClearCount += 1;\n } else {\n signals.authHeaderWriteCount += 1;\n }\n }\n if (\n ts.isIdentifier(node.expression.expression) &&\n node.expression.expression.text === 'document' &&\n isPropertyNamed(node.expression.name, 'write')\n ) {\n signals.rawHtmlInjectionCount += 1;\n }\n if (isPropertyNamed(node.expression.name, 'eval')) {\n signals.dynamicEvalCount += 1;\n }\n }\n }\n\n if (\n ts.isNewExpression(node) &&\n isRealtimeTransportConstructor(node) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.arguments?.[0]))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (\n ts.isNewExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === 'Function'\n ) {\n signals.dynamicEvalCount += 1;\n }\n\n if (\n ts.isNewExpression(node) &&\n ts.isIdentifier(node.expression) &&\n ['WebSocket', 'EventSource'].includes(node.expression.text) &&\n isInsecureTransportUrl(getExpressionLiteralValue(node.arguments?.[0]))\n ) {\n signals.insecureTransportEndpointCount += 1;\n }\n\n if (ts.isJsxSelfClosingElement(node)) {\n const tagName = getJsxTagName(node);\n if (hasMainLandmarkSignal(node.attributes, tagName)) {\n signals.mainLandmarkCount += 1;\n }\n if (isNavigationLandmark(tagName, node.attributes)) {\n navigationLandmarkCount += 1;\n if (!hasNavigationLabel(node.attributes)) {\n unlabeledNavigationLandmarkCount += 1;\n }\n }\n const mainLandmarkId = getMainLandmarkId(node.attributes, tagName);\n if (mainLandmarkId && !signals.mainLandmarkIds.includes(mainLandmarkId)) {\n signals.mainLandmarkIds.push(mainLandmarkId);\n }\n const skipNavTargetId = getSkipNavTargetId(node.attributes, tagName);\n if (skipNavTargetId && !signals.skipNavTargetIds.includes(skipNavTargetId)) {\n signals.skipNavTargetIds.push(skipNavTargetId);\n }\n if (\n tagName === 'button' &&\n hasAncestorJsxTag(node, 'form') &&\n !getJsxAttribute(node.attributes, 'type')\n ) {\n signals.buttonInFormWithoutTypeCount += 1;\n }\n if (tagName === 'button' && !hasAccessibleLabel(node.attributes, '')) {\n signals.iconOnlyButtonWithoutLabelCount += 1;\n }\n if (isLinkLikeTag(tagName) && !hasAccessibleLabel(node.attributes, '')) {\n signals.iconOnlyLinkWithoutLabelCount += 1;\n }\n if (isImageLikeTag(tagName) && !getJsxAttribute(node.attributes, 'alt')) {\n signals.imageWithoutAltCount += 1;\n }\n if (isImageSourceLikeTag(tagName) && isInsecureExternalImage(node.attributes)) {\n signals.insecureExternalImageCount += 1;\n }\n if (tagName === 'iframe' && !getJsxAttribute(node.attributes, 'title')) {\n signals.iframeWithoutTitleCount += 1;\n }\n if (isDialogLikeElement(node.attributes, tagName) && !hasDialogLabel(node.attributes)) {\n signals.dialogWithoutLabelCount += 1;\n }\n if (\n isDialogLikeElement(node.attributes, tagName) &&\n !hasDialogModalHint(node.attributes, tagName)\n ) {\n signals.dialogWithoutModalHintCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isExternalUrl(getJsxAttributeLiteralValue(getJsxAttribute(node.attributes, 'src'))) &&\n !getJsxAttribute(node.attributes, 'sandbox')\n ) {\n signals.externalIframeWithoutSandboxCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isInsecureExternalUrl(getJsxAttributeLiteralValue(getJsxAttribute(node.attributes, 'src')))\n ) {\n signals.insecureExternalIframeCount += 1;\n }\n if (tagName === 'form' && hasInsecureFormAction(node.attributes)) {\n signals.insecureFormActionCount += 1;\n }\n if (\n isNonSemanticInteractiveTag(tagName) &&\n getJsxAttribute(node.attributes, 'onClick') &&\n !getJsxAttribute(node.attributes, 'role') &&\n !getJsxAttribute(node.attributes, 'tabIndex')\n ) {\n signals.clickableNonSemanticCount += 1;\n }\n if (isLinkLikeTag(tagName) && isExternalLinkTargetBlankWithoutRel(node.attributes)) {\n signals.externalBlankLinkWithoutRelCount += 1;\n }\n if (hasPlaceholderNavigationTarget(node.attributes)) {\n signals.placeholderNavigationTargetCount += 1;\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(node.attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const hasAutocomplete = Boolean(autocompleteValue);\n if (inputType === 'email' && !hasAutocomplete) {\n signals.emailAutocompleteMissingCount += 1;\n }\n if (inputType === 'password' && !hasAutocomplete) {\n signals.passwordAutocompleteMissingCount += 1;\n }\n if (hasOtpAutocompleteIssue(node.attributes)) {\n signals.otpAutocompleteMissingCount += 1;\n }\n if ((inputType === 'email' || inputType === 'password') && autocompleteValue === 'off') {\n signals.authAutocompleteDisabledCount += 1;\n }\n if (hasAuthAutocompleteSemanticMismatch(node.attributes)) {\n signals.authAutocompleteSemanticMismatchCount += 1;\n }\n if (hasAuthInputTypeMismatch(node.attributes)) {\n signals.authInputTypeMismatchCount += 1;\n }\n if (\n hasAncestorJsxTag(node, 'form') &&\n isAuthLikeInputAttributes(node.attributes) &&\n !getJsxAttribute(node.attributes, 'name')\n ) {\n signals.authInputWithoutNameCount += 1;\n }\n }\n if (!hasFormControlLabel(node, tagName, node.attributes, labelForIds, '')) {\n signals.formControlWithoutLabelCount += 1;\n }\n }\n\n if (ts.isJsxElement(node)) {\n const tagName = getJsxTagName(node.openingElement);\n const textContent = getJsxTextContent(node).replace(/\\s+/g, ' ').trim();\n\n if (hasMainLandmarkSignal(node.openingElement.attributes, tagName)) {\n signals.mainLandmarkCount += 1;\n }\n if (isNavigationLandmark(tagName, node.openingElement.attributes)) {\n navigationLandmarkCount += 1;\n if (!hasNavigationLabel(node.openingElement.attributes)) {\n unlabeledNavigationLandmarkCount += 1;\n }\n }\n const mainLandmarkId = getMainLandmarkId(node.openingElement.attributes, tagName);\n if (mainLandmarkId && !signals.mainLandmarkIds.includes(mainLandmarkId)) {\n signals.mainLandmarkIds.push(mainLandmarkId);\n }\n const skipNavTargetId = getSkipNavTargetId(node.openingElement.attributes, tagName);\n if (skipNavTargetId && !signals.skipNavTargetIds.includes(skipNavTargetId)) {\n signals.skipNavTargetIds.push(skipNavTargetId);\n }\n if (\n tagName === 'button' &&\n hasAncestorJsxTag(node, 'form') &&\n !getJsxAttribute(node.openingElement.attributes, 'type')\n ) {\n signals.buttonInFormWithoutTypeCount += 1;\n }\n if (\n tagName === 'button' &&\n !hasAccessibleLabel(node.openingElement.attributes, textContent)\n ) {\n signals.iconOnlyButtonWithoutLabelCount += 1;\n }\n if (\n isLinkLikeTag(tagName) &&\n !hasAccessibleLabel(node.openingElement.attributes, textContent)\n ) {\n signals.iconOnlyLinkWithoutLabelCount += 1;\n }\n if (isImageLikeTag(tagName) && !getJsxAttribute(node.openingElement.attributes, 'alt')) {\n signals.imageWithoutAltCount += 1;\n }\n if (\n isImageSourceLikeTag(tagName) &&\n isInsecureExternalImage(node.openingElement.attributes)\n ) {\n signals.insecureExternalImageCount += 1;\n }\n if (tagName === 'iframe' && !getJsxAttribute(node.openingElement.attributes, 'title')) {\n signals.iframeWithoutTitleCount += 1;\n }\n if (\n isDialogLikeElement(node.openingElement.attributes, tagName) &&\n !hasDialogLabel(node.openingElement.attributes)\n ) {\n signals.dialogWithoutLabelCount += 1;\n }\n if (\n isDialogLikeElement(node.openingElement.attributes, tagName) &&\n !hasDialogModalHint(node.openingElement.attributes, tagName)\n ) {\n signals.dialogWithoutModalHintCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isExternalUrl(\n getJsxAttributeLiteralValue(getJsxAttribute(node.openingElement.attributes, 'src')),\n ) &&\n !getJsxAttribute(node.openingElement.attributes, 'sandbox')\n ) {\n signals.externalIframeWithoutSandboxCount += 1;\n }\n if (\n tagName === 'iframe' &&\n isInsecureExternalUrl(\n getJsxAttributeLiteralValue(getJsxAttribute(node.openingElement.attributes, 'src')),\n )\n ) {\n signals.insecureExternalIframeCount += 1;\n }\n if (tagName === 'form' && hasInsecureFormAction(node.openingElement.attributes)) {\n signals.insecureFormActionCount += 1;\n }\n if (tagName === 'form' && hasInsecureAuthFormMethod(node)) {\n signals.insecureAuthFormMethodCount += 1;\n }\n if (tagName === 'form' && hasAuthFormWithoutSubmitControl(node)) {\n signals.authFormWithoutSubmitCount += 1;\n }\n if (tagName === 'table' && !jsxTreeHasTag(node, ['th'])) {\n signals.tableWithoutHeaderCount += 1;\n }\n if (tagName === 'table' && !jsxTreeHasTag(node, ['caption'])) {\n signals.tableWithoutCaptionCount += 1;\n }\n\n if (\n isNonSemanticInteractiveTag(tagName) &&\n getJsxAttribute(node.openingElement.attributes, 'onClick') &&\n !getJsxAttribute(node.openingElement.attributes, 'role') &&\n !getJsxAttribute(node.openingElement.attributes, 'tabIndex')\n ) {\n signals.clickableNonSemanticCount += 1;\n }\n if (\n isLinkLikeTag(tagName) &&\n isExternalLinkTargetBlankWithoutRel(node.openingElement.attributes)\n ) {\n signals.externalBlankLinkWithoutRelCount += 1;\n }\n if (hasPlaceholderNavigationTarget(node.openingElement.attributes)) {\n signals.placeholderNavigationTargetCount += 1;\n }\n if (tagName === 'input') {\n const inputType = getNormalizedInputType(node.openingElement.attributes);\n const autocompleteValue = getJsxAttributeLiteralValue(\n getJsxAttribute(node.openingElement.attributes, 'autocomplete', 'autoComplete'),\n )\n ?.trim()\n .toLowerCase();\n const hasAutocomplete = Boolean(autocompleteValue);\n if (inputType === 'email' && !hasAutocomplete) {\n signals.emailAutocompleteMissingCount += 1;\n }\n if (inputType === 'password' && !hasAutocomplete) {\n signals.passwordAutocompleteMissingCount += 1;\n }\n if (hasOtpAutocompleteIssue(node.openingElement.attributes)) {\n signals.otpAutocompleteMissingCount += 1;\n }\n if ((inputType === 'email' || inputType === 'password') && autocompleteValue === 'off') {\n signals.authAutocompleteDisabledCount += 1;\n }\n if (hasAuthAutocompleteSemanticMismatch(node.openingElement.attributes)) {\n signals.authAutocompleteSemanticMismatchCount += 1;\n }\n if (hasAuthInputTypeMismatch(node.openingElement.attributes)) {\n signals.authInputTypeMismatchCount += 1;\n }\n if (\n hasAncestorJsxTag(node, 'form') &&\n isAuthLikeInputAttributes(node.openingElement.attributes) &&\n !getJsxAttribute(node.openingElement.attributes, 'name')\n ) {\n signals.authInputWithoutNameCount += 1;\n }\n }\n if (\n !hasFormControlLabel(\n node,\n tagName,\n node.openingElement.attributes,\n labelForIds,\n textContent,\n )\n ) {\n signals.formControlWithoutLabelCount += 1;\n }\n }\n\n ts.forEachChild(node, walk);\n };\n\n walk(sourceFile);\n signals.unlabeledNavigationLandmarkCount =\n navigationLandmarkCount > 1 ? unlabeledNavigationLandmarkCount : 0;\n signals.multipleMainLandmarkCount = Math.max(0, signals.mainLandmarkCount - 1);\n return signals;\n}\n\nexport function critiqueSource({\n filePath,\n code,\n reviewPack = null,\n packManifest = null,\n treatmentsCss = '',\n adoptionMode = null,\n}: CritiqueSourceInput): FileCritiqueReport {\n const codeLower = code.toLowerCase();\n const astSignals = analyzeAstSignals(filePath, code);\n const focusAreas = resolveFocusAreas(reviewPack);\n const findings: VerificationFinding[] = [];\n const scores: VerificationScore[] = [];\n const antiPatternIds = new Set(reviewPack?.antiPatterns.map((entry) => entry.id) ?? []);\n const isContractOnly = adoptionMode === 'contract-only';\n\n const usedTreatments = TREATMENT_CLASSES.filter((token) => code.includes(token));\n if (isContractOnly) {\n scores.push({\n category: 'Styling Authority',\n focusArea: 'treatment-usage',\n score: 3,\n details:\n 'Contract-only adoption does not require Decantr d-* treatment classes in source files.',\n suggestions: [\n 'Codify project-owned component variants and local rules when button/card/surface drift needs mechanical enforcement.',\n ],\n });\n } else {\n const treatmentSuggestions = TREATMENT_CLASSES.filter((token) => !code.includes(token)).map(\n (token) => `Consider using \\`${token}\\` where appropriate.`,\n );\n scores.push({\n category: 'Treatment Usage',\n focusArea: 'treatment-usage',\n score: scoreRatio(usedTreatments.length, TREATMENT_CLASSES.length),\n details: `${usedTreatments.length}/${TREATMENT_CLASSES.length} base treatments used: ${usedTreatments.join(', ') || 'none'}`,\n suggestions: treatmentSuggestions,\n });\n if (focusAreas.includes('treatment-usage') && usedTreatments.length === 0) {\n findings.push(\n makeFinding({\n id: 'treatment-usage-missing',\n category: 'Treatment Usage',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'page-pattern-contract',\n 'section-pattern-coverage',\n ]),\n message: 'No Decantr treatment classes were detected in the reviewed file.',\n evidence: [\n filePath,\n 'Expected tokens include d-interactive, d-surface, d-data, d-control, d-section, d-annotation, d-label.',\n ],\n file: filePath,\n suggestedFix:\n 'Apply the compiled treatment vocabulary instead of hand-rolled utility styling.',\n }),\n );\n }\n }\n\n const decoratorNames = buildDecoratorInventory(treatmentsCss);\n const usedDecorators = decoratorNames.filter((name) => code.includes(name));\n const usesCssVars = code.includes('var(--');\n if (isContractOnly) {\n scores.push({\n category: 'Theme Consistency',\n focusArea: 'theme-consistency',\n score: usesCssVars ? 4 : 3,\n details: `Contract-only mode: Decantr decorators are not required; CSS vars: ${usesCssVars ? 'yes' : 'no'}.`,\n suggestions: [\n 'Use the app design system, Tailwind theme, Sass variables, component variants, or accepted local rules as the styling authority.',\n ],\n });\n } else {\n scores.push({\n category: 'Theme Consistency',\n focusArea: 'theme-consistency',\n score:\n decoratorNames.length > 0\n ? scoreRatio((usedDecorators.length > 0 ? 1 : 0) + (usesCssVars ? 1 : 0), 2)\n : usesCssVars\n ? 4\n : 2,\n details: `Decorators used: ${usedDecorators.join(', ') || 'none'}; CSS vars: ${usesCssVars ? 'yes' : 'no'}`,\n suggestions: [\n ...(!usesCssVars ? ['Prefer CSS variable references over hardcoded visual values.'] : []),\n ...(decoratorNames.length > 0 && usedDecorators.length === 0\n ? ['Use theme decorators from treatments.css when they fit the component intent.']\n : []),\n ],\n });\n if (focusAreas.includes('theme-consistency') && !usesCssVars && usedDecorators.length === 0) {\n findings.push(\n makeFinding({\n id: 'theme-consistency-weak',\n category: 'Theme Consistency',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'theme-consistency',\n 'mutation-theme-contract',\n ]),\n message:\n 'The file does not appear to use theme decorators or CSS variables from the compiled contract.',\n evidence: [\n filePath,\n `Decorators available: ${decoratorNames.slice(0, 5).join(', ') || 'none'}`,\n ],\n file: filePath,\n suggestedFix:\n 'Anchor styling to tokens.css and treatments.css instead of local hardcoded values.',\n }),\n );\n }\n }\n\n const hasAria = codeLower.includes('aria-') || codeLower.includes('role=');\n const hasFocus = codeLower.includes('focus-visible') || codeLower.includes('focusvisible');\n const hasKeyboard = codeLower.includes('onkeydown') || codeLower.includes('onkeyup');\n const iconButtonIssues = astSignals.iconOnlyButtonWithoutLabelCount;\n const iconLinkIssues = astSignals.iconOnlyLinkWithoutLabelCount;\n const clickableNonSemanticIssues = astSignals.clickableNonSemanticCount;\n const unlabeledNavigationLandmarkIssues = astSignals.unlabeledNavigationLandmarkCount;\n const multipleMainLandmarkIssues = astSignals.multipleMainLandmarkCount;\n const imageAltIssues = astSignals.imageWithoutAltCount;\n const iframeTitleIssues = astSignals.iframeWithoutTitleCount;\n const dialogLabelIssues = astSignals.dialogWithoutLabelCount;\n const dialogModalHintIssues = astSignals.dialogWithoutModalHintCount;\n const tableHeaderIssues = astSignals.tableWithoutHeaderCount;\n const tableCaptionIssues = astSignals.tableWithoutCaptionCount;\n const formControlLabelIssues = astSignals.formControlWithoutLabelCount;\n scores.push({\n category: 'Accessibility',\n focusArea: 'accessibility',\n score: Math.max(\n 1,\n Math.min(\n 5,\n 1 +\n (hasAria ? 2 : 0) +\n (hasFocus ? 1 : 0) +\n (hasKeyboard ? 1 : 0) -\n (iconButtonIssues > 0 ? 1 : 0) -\n (iconLinkIssues > 0 ? 1 : 0) -\n (clickableNonSemanticIssues > 0 ? 1 : 0) -\n (unlabeledNavigationLandmarkIssues > 0 ? 1 : 0) -\n (multipleMainLandmarkIssues > 0 ? 1 : 0) -\n (imageAltIssues > 0 ? 1 : 0) -\n (iframeTitleIssues > 0 ? 1 : 0) -\n (dialogLabelIssues > 0 ? 1 : 0) -\n (dialogModalHintIssues > 0 ? 1 : 0) -\n (tableHeaderIssues > 0 ? 1 : 0) -\n (tableCaptionIssues > 0 ? 1 : 0) -\n (formControlLabelIssues > 0 ? 1 : 0),\n ),\n ),\n details: `ARIA: ${hasAria ? 'yes' : 'no'}, Focus: ${hasFocus ? 'yes' : 'no'}, Keyboard: ${hasKeyboard ? 'yes' : 'no'}, unlabeled icon buttons: ${iconButtonIssues}, unlabeled icon links: ${iconLinkIssues}, clickable non-semantic elements: ${clickableNonSemanticIssues}, unlabeled navigation landmarks: ${unlabeledNavigationLandmarkIssues}, extra main landmarks: ${multipleMainLandmarkIssues}, images without alt: ${imageAltIssues}, iframes without title: ${iframeTitleIssues}, dialogs without label: ${dialogLabelIssues}, dialogs without modal hint: ${dialogModalHintIssues}, tables without headers: ${tableHeaderIssues}, tables without caption: ${tableCaptionIssues}, form controls without labels: ${formControlLabelIssues}`,\n suggestions: [\n ...(!hasAria ? ['Add ARIA roles or labels to interactive regions.'] : []),\n ...(!hasFocus ? ['Add visible focus styling for keyboard navigation.'] : []),\n ...(!hasKeyboard\n ? ['Add keyboard handling where interactive behavior depends on pointer events.']\n : []),\n ...(iconButtonIssues > 0\n ? ['Add accessible labels to icon-only buttons via visible text or aria-label.']\n : []),\n ...(iconLinkIssues > 0\n ? ['Add accessible labels to icon-only links via visible text or aria-label.']\n : []),\n ...(clickableNonSemanticIssues > 0\n ? [\n 'Use semantic interactive elements or add role/tabIndex and keyboard handling to clickable non-semantic containers.',\n ]\n : []),\n ...(unlabeledNavigationLandmarkIssues > 0\n ? [\n 'Give multiple navigation landmarks distinct labels so assistive technologies can differentiate primary, sidebar, and utility nav regions.',\n ]\n : []),\n ...(multipleMainLandmarkIssues > 0\n ? ['Keep only one primary main landmark per rendered page or shell surface.']\n : []),\n ...(imageAltIssues > 0\n ? ['Add alt text to meaningful images and use alt=\"\" only for decorative ones.']\n : []),\n ...(iframeTitleIssues > 0\n ? [\n 'Add descriptive title attributes to embedded iframes so assistive technologies can identify their purpose.',\n ]\n : []),\n ...(dialogLabelIssues > 0\n ? ['Give dialogs an explicit accessible name via aria-label, aria-labelledby, or title.']\n : []),\n ...(dialogModalHintIssues > 0\n ? [\n 'Expose modal intent on dialog surfaces with aria-modal=\"true\" or a native open dialog contract.',\n ]\n : []),\n ...(tableHeaderIssues > 0\n ? [\n 'Give tables explicit header cells so assistive technologies can map data cells to column or row labels.',\n ]\n : []),\n ...(tableCaptionIssues > 0\n ? [\n 'Add a caption or equivalent programmatic summary so the table purpose is clear before users navigate its cells.',\n ]\n : []),\n ...(formControlLabelIssues > 0\n ? ['Add programmatic labels to form controls instead of relying on placeholders alone.']\n : []),\n ],\n });\n if (focusAreas.includes('accessibility')) {\n if (!hasAria) {\n findings.push(\n makeFinding({\n id: 'accessibility-aria-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'No ARIA roles or labels were detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Add ARIA metadata to interactive or landmark elements.',\n }),\n );\n }\n if (!hasKeyboard) {\n findings.push(\n makeFinding({\n id: 'accessibility-keyboard-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', ['review-remediation']),\n message: 'No keyboard interaction handlers were detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Verify interactive elements remain usable from the keyboard.',\n }),\n );\n }\n if (iconButtonIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-icon-button-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Icon-only button elements were detected without an accessible label.',\n evidence: [filePath, `Unlabeled icon buttons: ${iconButtonIssues}`],\n file: filePath,\n suggestedFix:\n 'Add visible text or an aria-label/aria-labelledby attribute to icon-only buttons.',\n }),\n );\n }\n if (iconLinkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-icon-link-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Icon-only link elements were detected without an accessible label.',\n evidence: [filePath, `Unlabeled icon links: ${iconLinkIssues}`],\n file: filePath,\n suggestedFix:\n 'Add visible text or an aria-label/aria-labelledby attribute to icon-only links.',\n }),\n );\n }\n if (clickableNonSemanticIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-clickable-non-semantic',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message:\n 'Clickable non-semantic elements were detected without the semantic/keyboard affordances accessibility tools expect.',\n evidence: [\n filePath,\n `Clickable non-semantic elements without role/tabIndex: ${clickableNonSemanticIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Prefer semantic controls like button/link, or add role, tabIndex, and keyboard handlers to non-semantic interactive containers.',\n }),\n );\n }\n if (unlabeledNavigationLandmarkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-navigation-landmark-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message:\n 'Multiple navigation landmarks were detected without distinct accessible labels.',\n evidence: [\n filePath,\n `Unlabeled navigation landmarks: ${unlabeledNavigationLandmarkIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Label multiple nav regions with aria-label or aria-labelledby so assistive technologies can distinguish primary, sidebar, and utility navigation.',\n }),\n );\n }\n if (multipleMainLandmarkIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-multiple-main-landmarks',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Multiple main landmarks were detected in the reviewed file.',\n evidence: [\n filePath,\n `Extra main landmarks beyond the first: ${multipleMainLandmarkIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render one primary `<main>` landmark per page or shell surface and move secondary regions into section/article/div containers instead.',\n }),\n );\n }\n if (imageAltIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-image-alt-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Image elements were detected without an `alt` attribute.',\n evidence: [filePath, `Images without alt: ${imageAltIssues}`],\n file: filePath,\n suggestedFix:\n 'Add meaningful alt text for informative images, or use alt=\"\" when the image is purely decorative.',\n }),\n );\n }\n if (iframeTitleIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-iframe-title-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Iframe elements were detected without a descriptive `title` attribute.',\n evidence: [filePath, `Iframes without title: ${iframeTitleIssues}`],\n file: filePath,\n suggestedFix:\n 'Add a concise title attribute to each iframe so assistive technologies can describe the embedded surface.',\n }),\n );\n }\n if (dialogLabelIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-dialog-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Dialog surfaces were detected without an explicit accessible name.',\n evidence: [\n filePath,\n `Dialogs without aria-label/aria-labelledby/title: ${dialogLabelIssues}`,\n ],\n file: filePath,\n suggestedFix:\n 'Name dialogs with aria-label, aria-labelledby, or title so assistive technologies can announce the dialog context.',\n }),\n );\n }\n if (dialogModalHintIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-dialog-modal-hint-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message: 'Dialog surfaces were detected without an explicit modal hint.',\n evidence: [filePath, `Dialogs without aria-modal/open signal: ${dialogModalHintIssues}`],\n file: filePath,\n suggestedFix:\n 'Expose modal intent with aria-modal=\"true\" for custom dialogs, or rely on a reviewed native dialog/open contract.',\n }),\n );\n }\n if (tableHeaderIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-table-headers-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['review-contract-baseline']),\n message: 'Table markup was detected without header cells.',\n evidence: [filePath, `Tables without <th> headers: ${tableHeaderIssues}`],\n file: filePath,\n suggestedFix:\n 'Add <th> cells with appropriate scope or otherwise expose explicit table headers so assistive technologies can map the data grid correctly.',\n }),\n );\n }\n if (tableCaptionIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-table-caption-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'info', [\n 'review-remediation',\n 'review-contract-baseline',\n ]),\n message: 'Table markup was detected without a caption or programmatic summary.',\n evidence: [filePath, `Tables without caption: ${tableCaptionIssues}`],\n file: filePath,\n suggestedFix:\n 'Add a <caption> or equivalent summary so users understand the table purpose before navigating its cells.',\n }),\n );\n }\n if (formControlLabelIssues > 0) {\n findings.push(\n makeFinding({\n id: 'accessibility-form-control-label-missing',\n category: 'Accessibility',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'review-remediation',\n ]),\n message: 'Form controls were detected without an associated accessible label.',\n evidence: [filePath, `Form controls without labels: ${formControlLabelIssues}`],\n file: filePath,\n suggestedFix:\n 'Associate inputs with visible labels or use aria-label/aria-labelledby when a visible label is not appropriate.',\n }),\n );\n }\n }\n\n const hasMedia =\n codeLower.includes('@media') ||\n codeLower.includes('usemediaquery') ||\n codeLower.includes('breakpoint');\n const hasResponsive =\n codeLower.includes('sm:') ||\n codeLower.includes('md:') ||\n codeLower.includes('lg:') ||\n codeLower.includes('_sm_') ||\n codeLower.includes('_md_');\n scores.push({\n category: 'Responsive Design',\n focusArea: 'responsive-design',\n score: Math.min(5, (hasMedia ? 3 : 1) + (hasResponsive ? 2 : 0)),\n details: `Media queries: ${hasMedia ? 'yes' : 'no'}, Responsive signals: ${hasResponsive ? 'yes' : 'no'}`,\n suggestions: !hasMedia && !hasResponsive ? ['Add responsive breakpoint handling.'] : [],\n });\n if (focusAreas.includes('responsive-design') && !hasMedia && !hasResponsive) {\n findings.push(\n makeFinding({\n id: 'responsive-signals-missing',\n category: 'Responsive Design',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', ['page-pattern-contract']),\n message: 'No responsive breakpoint handling was detected in the reviewed file.',\n evidence: [filePath],\n file: filePath,\n suggestedFix: 'Add responsive layout behavior that matches the compiled route contract.',\n }),\n );\n }\n\n const hasTransition =\n codeLower.includes('transition') ||\n codeLower.includes('animate') ||\n codeLower.includes('keyframe') ||\n codeLower.includes('framer');\n const hasHover =\n codeLower.includes(':hover') ||\n codeLower.includes('onmouseenter') ||\n codeLower.includes('hover:');\n const buttonInFormWithoutTypeCount = astSignals.buttonInFormWithoutTypeCount;\n const authFormWithoutSubmitCount = astSignals.authFormWithoutSubmitCount;\n const authInputWithoutNameCount = astSignals.authInputWithoutNameCount;\n const authProtectedRedirectSignalCount = astSignals.authProtectedRedirectSignalCount;\n const authAnonymousRedirectSignalCount = astSignals.authAnonymousRedirectSignalCount;\n const authExitSignalCount = astSignals.authExitSignalCount;\n const authSessionTeardownSignalCount = astSignals.authSessionTeardownSignalCount;\n const authStorageWriteCount = astSignals.authStorageWriteCount;\n const authStorageClearCount = astSignals.authStorageClearCount;\n const authCookieWriteCount = astSignals.authCookieWriteCount;\n const authCookieClearCount = astSignals.authCookieClearCount;\n const authHeaderWriteCount = astSignals.authHeaderWriteCount;\n const authHeaderClearCount = astSignals.authHeaderClearCount;\n const authCacheClientCount = astSignals.authCacheClientCount;\n const authCacheClearCount = astSignals.authCacheClearCount;\n const authRefreshSignalCount = astSignals.authRefreshSignalCount;\n const authRefreshClearCount = astSignals.authRefreshClearCount;\n const authRealtimeSignalCount = countAuthRealtimeSignals(code);\n const authRealtimeClearCount = countAuthRealtimeClearSignals(code);\n const authCoordinationSignalCount = countAuthCoordinationSignals(code);\n const authCoordinationClearCount = countAuthCoordinationClearSignals(code);\n const authErrorSignalCount = countAuthErrorSignals(code);\n const authSuccessSignalCount = countAuthSuccessSignals(code);\n const authCallbackTokenSignalCount = countAuthCallbackTokenSignals(code, filePath);\n const authCallbackExchangeSignalCount = countAuthCallbackExchangeSignals(code);\n const authCallbackExchangeErrorSignalCount = countAuthCallbackExchangeErrorSignals(code);\n const authCallbackErrorSignalCount = countAuthCallbackErrorSignals(code, filePath);\n const authCallbackStateSignalCount = countAuthCallbackStateSignals(code);\n const authCallbackStateValidationSignalCount = countAuthCallbackStateValidationSignals(code);\n const authCallbackStateStorageSignalCount = countAuthCallbackStateStorageSignals(code);\n const authCallbackStateStorageClearSignalCount = countAuthCallbackStateStorageClearSignals(code);\n const authUnauthenticatedBranchSignalCount = countAuthUnauthenticatedBranchSignals(code);\n const hasAuthCallbackErrorGap =\n authCallbackTokenSignalCount > 0 && authCallbackErrorSignalCount === 0;\n scores.push({\n category: 'Motion & Interaction',\n focusArea: 'motion-interaction',\n score: Math.max(\n 1,\n Math.min(\n 5,\n (hasTransition ? 3 : 1) +\n (hasHover ? 2 : 0) -\n (buttonInFormWithoutTypeCount > 0 ? 1 : 0) -\n (authFormWithoutSubmitCount > 0 ? 1 : 0) -\n (authInputWithoutNameCount > 0 ? 1 : 0) -\n (authExitSignalCount > 0 && authSessionTeardownSignalCount === 0 ? 1 : 0),\n ),\n ),\n details: `Transitions: ${hasTransition ? 'yes' : 'no'}, Hover states: ${hasHover ? 'yes' : 'no'}, form buttons missing type: ${buttonInFormWithoutTypeCount}, auth forms without submit control: ${authFormWithoutSubmitCount}, auth inputs without name: ${authInputWithoutNameCount}, auth redirects to protected routes: ${authProtectedRedirectSignalCount}, auth exits without anonymous redirect: ${authExitSignalCount > 0 && authAnonymousRedirectSignalCount === 0 ? 1 : 0}, auth exits without teardown: ${authExitSignalCount > 0 && authSessionTeardownSignalCount === 0 ? 1 : 0}`,\n suggestions: [\n ...(!hasTransition\n ? ['Add transitions for interactive state changes where appropriate.']\n : []),\n ...(buttonInFormWithoutTypeCount > 0\n ? [\n 'Add explicit button types inside forms so non-submit actions do not accidentally submit.',\n ]\n : []),\n ...(authFormWithoutSubmitCount > 0\n ? [\n 'Auth-like forms should expose a clear submit control so users can actually complete the credential flow.',\n ]\n : []),\n ...(authInputWithoutNameCount > 0\n ? [\n 'Give auth-related form inputs stable `name` attributes so browser form posts and FormData submissions include the credential values.',\n ]\n : []),\n ...(authProtectedRedirectSignalCount > 0\n ? [\n 'Keep unauthenticated guard redirects pointed at anonymous entry routes, not protected destinations like `/dashboard` or `/app`.',\n ]\n : []),\n ...(authExitSignalCount > 0 && authAnonymousRedirectSignalCount === 0\n ? [\n 'After sign-out, return users to an anonymous entry route instead of leaving the protected shell in place.',\n ]\n : []),\n ...(authExitSignalCount > 0 && authSessionTeardownSignalCount === 0\n ? [\n 'Do not treat redirect-only logout as a complete sign-out. Explicitly invalidate the reviewed session before returning users to an anonymous route.',\n ]\n : []),\n ],\n });\n if (buttonInFormWithoutTypeCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-button-type-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Buttons inside forms were detected without an explicit `type` attribute.',\n evidence: [filePath, `Buttons inside forms without type: ${buttonInFormWithoutTypeCount}`],\n file: filePath,\n suggestedFix:\n 'Set `type=\"button\"` for non-submit actions and `type=\"submit\"` for the intended submit control.',\n }),\n );\n }\n\n if (authFormWithoutSubmitCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-auth-submit-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Auth-like forms were detected without any submit control.',\n evidence: [filePath, `Auth forms without submit control: ${authFormWithoutSubmitCount}`],\n file: filePath,\n suggestedFix:\n 'Add an explicit submit button or submit input so users can complete the sign-in, registration, or recovery flow.',\n }),\n );\n }\n\n if (authInputWithoutNameCount > 0) {\n findings.push(\n makeFinding({\n id: 'interaction-auth-input-name-missing',\n category: 'Interaction Safety',\n severity: 'warn',\n message: 'Auth-like form inputs were detected without a `name` attribute.',\n evidence: [filePath, `Auth inputs without name: ${authInputWithoutNameCount}`],\n file: filePath,\n suggestedFix:\n 'Add stable name attributes such as `email`, `username`, or `password` so browser form submission and FormData handling include the credential values.',\n }),\n );\n }\n\n if (\n authProtectedRedirectSignalCount > 0 &&\n (astSignals.authGuardSignalCount > 0 || astSignals.authSessionSignalCount > 0) &&\n astSignals.authEntrySignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-guard-protected-redirect',\n category: 'Route Topology',\n severity: 'warn',\n message:\n 'Auth/session logic in the reviewed file redirects toward protected destinations instead of anonymous entry routes.',\n evidence: [filePath, `Protected auth redirects: ${authProtectedRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Redirect unauthenticated flows to `/`, `/login`, `/register`, or another gateway route, and reserve redirects to `/dashboard` or `/app` for reviewed post-auth success flows.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n (astSignals.authSessionSignalCount > 0 || astSignals.authGuardSignalCount > 0) &&\n authAnonymousRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-exit-redirect-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'Auth/session exit logic does not show an obvious redirect back to an anonymous entry route.',\n evidence: [\n filePath,\n `Auth exit signals: ${authExitSignalCount}`,\n `Anonymous auth redirects: ${authAnonymousRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After logout or session exit, navigate users to `/`, `/login`, `/register`, or another reviewed anonymous entry route so protected shells do not linger after sign-out.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n (astSignals.authSessionSignalCount > 0 || astSignals.authGuardSignalCount > 0) &&\n authSessionTeardownSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-exit-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'Auth/session exit logic redirects users away but does not show an obvious session teardown or sign-out boundary.',\n evidence: [\n filePath,\n `Auth exit signals: ${authExitSignalCount}`,\n `Session teardown signals: ${authSessionTeardownSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Before redirecting users to `/login` or another anonymous route, explicitly sign out or invalidate the reviewed session state.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authStorageWriteCount > 0 && authStorageClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-storage-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow writes auth data into browser storage but does not show that storage being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth storage writes: ${authStorageWriteCount}`,\n `Auth storage clears: ${authStorageClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow stores auth/session data in browser storage, remove those auth keys during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authCookieWriteCount > 0 && authCookieClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-cookie-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow issues auth-like cookies but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth cookie writes: ${authCookieWriteCount}`,\n `Auth cookie clears: ${authCookieClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow issues auth cookies from reviewed source code, explicitly expire or delete those cookies during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authHeaderWriteCount > 0 && authHeaderClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-header-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow constructs auth-like headers but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth header writes: ${authHeaderWriteCount}`,\n `Auth header clears: ${authHeaderClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If this flow constructs auth/session headers in reviewed source code, explicitly delete or reset those header values during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authCacheClientCount > 0 &&\n authCacheClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-cache-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow uses client-side data caches but does not show them being cleared during sign-out.',\n evidence: [\n filePath,\n `Auth cache clients: ${authCacheClientCount}`,\n `Auth cache clears: ${authCacheClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If protected data is cached in query clients or client data stores, clear or reset those caches during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (authExitSignalCount > 0 && authRefreshSignalCount > 0 && authRefreshClearCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-refresh-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow starts background auth refresh work but does not show it being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth refresh signals: ${authRefreshSignalCount}`,\n `Auth refresh clears: ${authRefreshClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If auth/session refresh runs on timers or subscriptions, clear those intervals, timeouts, or listeners during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authRealtimeSignalCount > 0 &&\n authRealtimeClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-realtime-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow starts realtime channels or sockets but does not show them being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth realtime signals: ${authRealtimeSignalCount}`,\n `Auth realtime clears: ${authRealtimeClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If protected data arrives over websockets, SSE, or realtime channels, close or unsubscribe those connections during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n if (\n authExitSignalCount > 0 &&\n authCoordinationSignalCount > 0 &&\n authCoordinationClearCount === 0 &&\n (astSignals.protectedSurfaceSignalCount > 0 || astSignals.authSessionSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-coordination-teardown-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth exit flow coordinates auth state across tabs but does not show those channels or listeners being torn down during sign-out.',\n evidence: [\n filePath,\n `Auth coordination signals: ${authCoordinationSignalCount}`,\n `Auth coordination clears: ${authCoordinationClearCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'If auth state is coordinated across tabs with BroadcastChannel or storage listeners, close those channels and remove those listeners during sign-out before redirecting users back to an anonymous route.',\n }),\n );\n }\n\n const reviewRoutes = reviewPack?.data?.routes ?? [];\n const hasProtectedRouteInReview = reviewRoutes.some((route) => isProtectedLikeRoute(route.path));\n const hasRecoveryRouteInReview = reviewRoutes.some((route) => isRecoveryLikeRoute(route.path));\n const hasSignInRouteInReview = reviewRoutes.some((route) => isSignInLikeRoute(route.path));\n const hasRegistrationRouteInReview = reviewRoutes.some((route) =>\n isRegistrationLikeRoute(route.path),\n );\n const hasAnonymousEntryRouteInReview = reviewRoutes.some((route) =>\n isAnonymousEntryLikeRoute(route.path),\n );\n const signInFlowSignals = countSignInFlowSignals(code, filePath);\n const recoveryFlowSignals = countRecoveryFlowSignals(code, filePath);\n const signUpFlowSignals = countSignUpFlowSignals(code, filePath);\n const requiresProtectedSuccessTransition =\n signInFlowSignals > 0 ||\n (astSignals.authEntrySignalCount > 0 && signUpFlowSignals === 0 && recoveryFlowSignals === 0);\n const authRecoveryRouteSignalCount = countAuthRecoveryRouteSignals(code);\n const registrationRouteSignalCount = countRegistrationRouteSignals(code);\n const anonymousEntryRouteSignalCount = countAnonymousEntryRouteSignals(code);\n const signInRouteSignalCount = countSignInRouteSignals(code);\n if (\n requiresProtectedSuccessTransition &&\n hasProtectedRouteInReview &&\n authProtectedRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-success-redirect-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed auth entry flow does not show an obvious transition into the protected application surface.',\n evidence: [\n filePath,\n `Auth entry signals: ${astSignals.authEntrySignalCount}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After reviewed sign-in, registration, or recovery success, navigate users to a protected route like `/dashboard`, `/app`, or another primary destination declared in the compiled route contract.',\n }),\n );\n }\n\n if (signInFlowSignals > 0 && hasRecoveryRouteInReview && authRecoveryRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-recovery-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed sign-in flow does not show an obvious path into the declared account-recovery route.',\n evidence: [\n filePath,\n `Sign-in flow signals: ${signInFlowSignals}`,\n `Reviewed recovery routes: ${\n reviewRoutes\n .filter((route) => isRecoveryLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Recovery route signals: ${authRecoveryRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link sign-in users to the reviewed recovery route, such as `/forgot-password` or `/reset-password`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (signInFlowSignals > 0 && hasRegistrationRouteInReview && registrationRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-registration-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed sign-in flow does not show an obvious path into the declared registration route.',\n evidence: [\n filePath,\n `Sign-in flow signals: ${signInFlowSignals}`,\n `Reviewed registration routes: ${\n reviewRoutes\n .filter((route) => isRegistrationLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Registration route signals: ${registrationRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link sign-in users to the reviewed registration route, such as `/register` or `/sign-up`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (\n recoveryFlowSignals > 0 &&\n hasAnonymousEntryRouteInReview &&\n anonymousEntryRouteSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-entry-return-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed recovery flow does not show an obvious path back into the declared anonymous entry route.',\n evidence: [\n filePath,\n `Recovery flow signals: ${recoveryFlowSignals}`,\n `Reviewed anonymous entry routes: ${\n reviewRoutes\n .filter((route) => isAnonymousEntryLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Anonymous entry route signals: ${anonymousEntryRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link recovery users back to a reviewed anonymous entry route, such as `/login`, `/register`, or `/`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (signUpFlowSignals > 0 && hasSignInRouteInReview && signInRouteSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'route-auth-signin-link-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed registration flow does not show an obvious path back into the declared sign-in route.',\n evidence: [\n filePath,\n `Registration flow signals: ${signUpFlowSignals}`,\n `Reviewed sign-in routes: ${\n reviewRoutes\n .filter((route) => isSignInLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Sign-in route signals: ${signInRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Link registration users back to the reviewed sign-in route, such as `/login` or `/sign-in`, whenever the compiled route contract declares one.',\n }),\n );\n }\n\n if (\n (((authCallbackTokenSignalCount > 0 || authCallbackStateSignalCount > 0) &&\n authCallbackErrorSignalCount > 0) ||\n (authCallbackExchangeSignalCount > 0 && authCallbackExchangeErrorSignalCount > 0)) &&\n hasSignInRouteInReview &&\n signInRouteSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'route-auth-callback-entry-return-missing',\n category: 'Route Topology',\n severity: 'info',\n message:\n 'The reviewed auth callback failure path does not show an obvious route back to the declared sign-in surface.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n `Auth callback exchange signals: ${authCallbackExchangeSignalCount}`,\n `Auth callback exchange error signals: ${authCallbackExchangeErrorSignalCount}`,\n `Reviewed sign-in routes: ${\n reviewRoutes\n .filter((route) => isSignInLikeRoute(route.path))\n .map((route) => route.path)\n .join(', ') || 'none'\n }`,\n `Sign-in route signals: ${signInRouteSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback handling or callback session exchange fails, link or redirect users back to a reviewed sign-in route such as `/login` or `/sign-in` instead of leaving users on an isolated callback failure state.',\n }),\n );\n }\n\n if (astSignals.authSessionSignalCount > 0 && astSignals.authLoadingSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth/session flow does not show an obvious loading or pending state while session resolution happens.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render an explicit loading, pending, skeleton, or suspense fallback while auth or session state resolves so protected content does not flash or race.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authProtectedLoadingRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-protected-render',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface shows a loading branch, but that branch still appears to render a protected destination while session state is unresolved.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Protected loading renders: ${astSignals.authProtectedLoadingRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'While auth/session state is loading, render a neutral spinner, skeleton, suspense fallback, or guard boundary instead of returning a dashboard/app shell before the session is confirmed.',\n }),\n );\n }\n\n if (\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authBlankLoadingRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-blank-render',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth/session loading branch returns nothing instead of an explicit pending boundary.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Blank loading renders: ${astSignals.authBlankLoadingRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Render a spinner, skeleton, suspense fallback, or another explicit pending UI while auth/session state resolves instead of returning `null` or an empty fragment.',\n }),\n );\n }\n\n if (\n astSignals.authSessionSignalCount > 0 &&\n astSignals.authLoadingSignalCount > 0 &&\n astSignals.authAnonymousLoadingRedirectCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-loading-anonymous-redirect',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth/session loading branch redirects users to an anonymous route before session state is resolved.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth loading signals: ${astSignals.authLoadingSignalCount}`,\n `Anonymous loading redirects: ${astSignals.authAnonymousLoadingRedirectCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'While auth/session state is still loading, render a pending boundary instead of redirecting to `/login`, `/`, or another anonymous route. Only redirect after the session resolves as unauthenticated.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount > 0 &&\n astSignals.authProtectedUnauthenticatedRenderCount > 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-protected-render',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface branches on auth loss but still appears to render a protected destination in the unauthenticated branch.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Protected unauthenticated renders: ${astSignals.authProtectedUnauthenticatedRenderCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect to a reviewed anonymous route or render a neutral guard boundary instead of returning a dashboard/app shell.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-handling-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface reads auth/session state but does not show an explicit unauthenticated branch when session resolution fails or the user signs out.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Auth guard signals: ${astSignals.authGuardSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When protected surfaces read session state directly, branch on unauthenticated/null-session cases and redirect to a reviewed anonymous route or return a guard boundary before protected content renders.',\n }),\n );\n }\n\n if (\n astSignals.protectedSurfaceSignalCount > 0 &&\n astSignals.authSessionSignalCount > 0 &&\n authUnauthenticatedBranchSignalCount > 0 &&\n authAnonymousRedirectSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-session-loss-redirect-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed protected surface branches on auth loss but does not show an obvious redirect back to an anonymous route.',\n evidence: [\n filePath,\n `Protected surface signals: ${astSignals.protectedSurfaceSignalCount}`,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Unauthenticated branch signals: ${authUnauthenticatedBranchSignalCount}`,\n `Anonymous redirect signals: ${authAnonymousRedirectSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When a protected surface detects a null or unauthenticated session, redirect users to `/`, `/login`, `/register`, or another reviewed anonymous route instead of returning `null` or leaving the protected shell blank.',\n }),\n );\n }\n\n if (hasAuthCallbackErrorGap) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-error-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth callback flow does not show an obvious failure state for provider-denied or callback error returns.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback routes can receive `error`, `error_description`, or related provider-return params, branch on those values and show a reviewed failure state before or alongside success redirects.',\n }),\n );\n }\n\n if (\n (astSignals.authSessionSignalCount > 0 || astSignals.authEntrySignalCount > 0) &&\n authErrorSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-error-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth flow does not show an obvious failure state for rejected sign-in, recovery, or session refresh paths.',\n evidence: [\n filePath,\n `Auth/session signals: ${astSignals.authSessionSignalCount}`,\n `Auth entry signals: ${astSignals.authEntrySignalCount}`,\n `Auth error signals: ${authErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Expose reviewed error handling with inline feedback, alert messaging, or another explicit failure affordance for sign-in, recovery, or session refresh failures.',\n }),\n );\n }\n\n if (recoveryFlowSignals > 0 && authSuccessSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-recovery-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed recovery flow does not show an obvious success or confirmation state after the reset request completes.',\n evidence: [\n filePath,\n `Recovery flow signals: ${recoveryFlowSignals}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After recovery or reset submission succeeds, show a reviewed confirmation state such as \"check your email\", \"reset link sent\", or another explicit success affordance.',\n }),\n );\n }\n\n if (\n signUpFlowSignals > 0 &&\n authProtectedRedirectSignalCount === 0 &&\n authSuccessSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-registration-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed registration flow does not show either a protected post-auth transition or an explicit success/verification state.',\n evidence: [\n filePath,\n `Registration flow signals: ${signUpFlowSignals}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After registration succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state such as \"account created\" or \"check your email\" before the next auth step.',\n }),\n );\n }\n\n if (\n (authCallbackTokenSignalCount > 0 || authCallbackStateSignalCount > 0) &&\n authProtectedRedirectSignalCount === 0 &&\n authSuccessSignalCount === 0\n ) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-success-missing',\n category: 'State Handling',\n severity: 'info',\n message:\n 'The reviewed auth callback flow does not show either a protected post-auth transition or an explicit success/verification state.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback state reads: ${authCallbackStateSignalCount}`,\n `Protected auth redirects: ${authProtectedRedirectSignalCount}`,\n `Auth success signals: ${authSuccessSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After callback validation or code exchange succeeds, either navigate users into a reviewed protected route like `/dashboard` or show an explicit success state before the next auth step.',\n }),\n );\n }\n\n if (authCallbackExchangeSignalCount > 0 && authCallbackExchangeErrorSignalCount === 0) {\n findings.push(\n makeFinding({\n id: 'state-auth-callback-exchange-error-missing',\n category: 'State Handling',\n severity: 'warn',\n message:\n 'The reviewed auth callback exchange does not show explicit failure handling if session completion rejects.',\n evidence: [\n filePath,\n `Auth callback exchange signals: ${authCallbackExchangeSignalCount}`,\n `Auth callback exchange error signals: ${authCallbackExchangeErrorSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Wrap reviewed callback code/session exchange in catch handling or explicit exchange-error state so failures do not leave users stuck on an indefinite callback surface.',\n }),\n );\n }\n\n const knownRoutes = reviewPack?.data?.routes?.length ?? packManifest?.pages.length ?? 0;\n const placeholderNavigationTargets = astSignals.placeholderNavigationTargetCount;\n scores.push({\n category: 'Topology Context',\n focusArea: 'route-topology',\n score: Math.max(\n 1,\n (reviewPack ? 5 : packManifest ? 4 : 1) - (placeholderNavigationTargets > 0 ? 2 : 0),\n ),\n details: reviewPack\n ? `Compiled review contract covers ${knownRoutes} routes. Placeholder navigation targets: ${placeholderNavigationTargets}.`\n : packManifest\n ? `Pack manifest is available for ${knownRoutes} pages, but the review pack is missing. Placeholder navigation targets: ${placeholderNavigationTargets}.`\n : `No compiled route context was available during critique. Placeholder navigation targets: ${placeholderNavigationTargets}.`,\n suggestions: [\n ...(reviewPack\n ? []\n : [\n 'Run `decantr registry compile-packs decantr.essence.json --write-context` so critique starts from a compiled review contract.',\n ]),\n ...(placeholderNavigationTargets > 0\n ? [\n 'Replace placeholder href/to targets with real route destinations from the compiled contract.',\n ]\n : []),\n ],\n });\n if (focusAreas.includes('route-topology') && !reviewPack) {\n findings.push(\n makeFinding({\n id: 'review-pack-missing-for-critique',\n category: 'Route Topology',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'route-topology',\n 'page-route-contract',\n ]),\n message: 'Critique ran without a compiled review pack.',\n evidence: ['review-pack unavailable'],\n file: filePath,\n suggestedFix:\n 'Regenerate execution packs so critique findings can anchor to the compiled route contract.',\n }),\n );\n }\n if (focusAreas.includes('route-topology') && placeholderNavigationTargets > 0) {\n findings.push(\n makeFinding({\n id: 'route-placeholder-navigation-target',\n category: 'Route Topology',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'route-topology',\n 'page-route-contract',\n 'review-remediation',\n ]),\n message: 'Placeholder navigation targets were detected in the reviewed file.',\n evidence: [filePath, `Placeholder href/to targets: ${placeholderNavigationTargets}`],\n file: filePath,\n suggestedFix:\n 'Replace placeholder route targets like `#` or `javascript:void(0)` with the actual page paths from the compiled review contract.',\n }),\n );\n }\n\n const hasInlineStyleLiterals =\n astSignals.inlineStyleAttributeCount > 0 || /style\\s*=\\s*[\"']/.test(code);\n if (antiPatternIds.has('inline-styles') && hasInlineStyleLiterals) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-inline-styles',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'theme-consistency',\n ]),\n message: 'Inline style literals were detected in the reviewed file.',\n evidence: [\n filePath,\n `Disallowed inline style attributes: ${astSignals.inlineStyleAttributeCount}`,\n ],\n file: filePath,\n suggestedFix: isContractOnly\n ? 'Replace static inline visual values with the project design system, accepted component variants, or local style rules. Keep inline style only for truly dynamic geometry.'\n : 'Replace static inline visual values with treatments, decorators, and CSS variables from the compiled contract. Keep inline style only for Decantr CSS-variable writes and truly dynamic geometry.',\n }),\n );\n }\n\n const componentStyleTagSignals = countComponentStyleTagSignals(code);\n if (componentStyleTagSignals > 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-component-style-tags',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'review-contract-baseline',\n 'theme-consistency',\n ]),\n message:\n 'Component-scoped style tags or dynamic style elements were detected in the reviewed file.',\n evidence: [filePath, `Component style tag signals: ${componentStyleTagSignals}`],\n file: filePath,\n suggestedFix: isContractOnly\n ? 'Move shared keyframes, media queries, and visual rules into the project stylesheet, component library, or accepted local pattern/rule manifest.'\n : 'Move shared keyframes, media queries, and visual rules into global.css or treatments.css so the file stays aligned with the Decantr layer contract.',\n }),\n );\n }\n\n const hardcodedColors = antiPatternIds.has('hardcoded-colors') ? findHardcodedColors(code) : [];\n if (hardcodedColors.length > 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-hardcoded-colors',\n category: 'Anti-Patterns',\n severity: resolveSeverityFromChecks(reviewPack, 'warn', [\n 'theme-consistency',\n 'mutation-theme-contract',\n ]),\n message: 'Hardcoded color literals were detected in the reviewed file.',\n evidence: [filePath, `Color literals: ${hardcodedColors.slice(0, 5).join(', ')}`],\n file: filePath,\n suggestedFix:\n 'Replace hardcoded colors with CSS variables or theme decorators from Decantr.',\n }),\n );\n }\n\n const utilitySignals = antiPatternIds.has('utility-framework-leakage')\n ? findUtilityFrameworkSignals(code)\n : [];\n if (utilitySignals.length > 0 && usedTreatments.length === 0) {\n findings.push(\n makeFinding({\n id: 'anti-pattern-utility-framework-leakage',\n category: 'Anti-Patterns',\n severity: 'info',\n message:\n 'Utility-framework class patterns appear to be carrying the primary visual system for this file.',\n evidence: [filePath, `Utility signals: ${utilitySignals.slice(0, 6).join(', ')}`],\n file: filePath,\n suggestedFix:\n 'Use Decantr treatments and decorators as the primary styling contract, with utilities only as supporting glue when necessary.',\n }),\n );\n }\n\n const dangerousHtmlCount = astSignals.dangerousHtmlCount;\n const rawHtmlInjectionCount = Math.max(\n astSignals.rawHtmlInjectionCount,\n /\\binnerHTML\\s*=|\\binsertAdjacentHTML\\s*\\(|\\bdocument\\.write\\s*\\(/.test(code) ? 1 : 0,\n );\n const dynamicEvalCount = Math.max(\n astSignals.dynamicEvalCount,\n /\\beval\\s*\\(|new\\s+Function\\s*\\(/.test(code) ? 1 : 0,\n );\n const externalIframeWithoutSandboxCount = astSignals.externalIframeWithoutSandboxCount;\n const insecureFormActionCount = astSignals.insecureFormActionCount;\n const insecureAuthFormMethodCount = astSignals.insecureAuthFormMethodCount;\n const insecureTransportEndpointCount = astSignals.insecureTransportEndpointCount;\n const insecureExternalImageCount = astSignals.insecureExternalImageCount;\n const externalBlankLinkWithoutRelCount = astSignals.externalBlankLinkWithoutRelCount;\n const authOpenRedirectSignalCount = astSignals.authOpenRedirectSignalCount;\n const authExternalRedirectSignalCount = astSignals.authExternalRedirectSignalCount;\n const authProviderStateMissingCount = astSignals.authProviderStateMissingCount;\n const authProviderPkceMissingCount = astSignals.authProviderPkceMissingCount;\n const authProviderNonceMissingCount = astSignals.authProviderNonceMissingCount;\n const authCallbackUrlScrubSignalCount = countAuthCallbackUrlScrubSignals(code);\n const emailAutocompleteMissingCount = astSignals.emailAutocompleteMissingCount;\n const passwordAutocompleteMissingCount = astSignals.passwordAutocompleteMissingCount;\n const otpAutocompleteMissingCount = astSignals.otpAutocompleteMissingCount;\n const authAutocompleteDisabledCount = astSignals.authAutocompleteDisabledCount;\n const authAutocompleteSemanticMismatchCount = astSignals.authAutocompleteSemanticMismatchCount;\n const authInputTypeMismatchCount = astSignals.authInputTypeMismatchCount;\n const hardcodedSecretSignalCount = astSignals.hardcodedSecretSignalCount;\n const clientSecretEnvReferenceCount = astSignals.clientSecretEnvReferenceCount;\n const localhostEndpointCount = astSignals.localhostEndpointCount;\n const wildcardPostMessageCount = astSignals.wildcardPostMessageCount;\n const windowOpenWithoutNoopenerCount = astSignals.windowOpenWithoutNoopenerCount;\n const messageListenerWithoutOriginCheckCount = astSignals.messageListenerWithoutOriginCheckCount;\n const authCookieMissingHardeningCount = astSignals.authCookieMissingHardeningCount;\n const insecureExternalIframeCount = astSignals.insecureExternalIframeCount;\n const hasDangerousHtml = dangerousHtmlCount > 0;\n const hasRawHtmlInjection = rawHtmlInjectionCount > 0;\n const hasDynamicEval = dynamicEvalCount > 0;\n const hasExternalIframeWithoutSandbox = externalIframeWithoutSandboxCount > 0;\n const hasInsecureFormAction = insecureFormActionCount > 0;\n const hasInsecureAuthFormMethod = insecureAuthFormMethodCount > 0;\n const hasInsecureTransportEndpoint = insecureTransportEndpointCount > 0;\n const hasInsecureExternalImage = insecureExternalImageCount > 0;\n const hasExternalBlankLinkWithoutRel = externalBlankLinkWithoutRelCount > 0;\n const hasAuthOpenRedirectSignals = authOpenRedirectSignalCount > 0;\n const hasAuthExternalRedirectSignals = authExternalRedirectSignalCount > 0;\n const hasAuthProviderStateMissing = authProviderStateMissingCount > 0;\n const hasAuthProviderPkceMissing = authProviderPkceMissingCount > 0;\n const hasAuthProviderNonceMissing = authProviderNonceMissingCount > 0;\n const hasAuthCallbackStateValidationGap =\n authCallbackStateSignalCount > 0 && authCallbackStateValidationSignalCount === 0;\n const hasAuthCallbackStateTeardownGap =\n authCallbackStateValidationSignalCount > 0 &&\n authCallbackStateStorageSignalCount > 0 &&\n authCallbackStateStorageClearSignalCount === 0;\n const hasAuthCallbackUrlScrubGap =\n (authCallbackTokenSignalCount > 0 || authCallbackErrorSignalCount > 0) &&\n authCallbackUrlScrubSignalCount === 0;\n const hasAuthAutocompleteIssues =\n emailAutocompleteMissingCount > 0 ||\n passwordAutocompleteMissingCount > 0 ||\n otpAutocompleteMissingCount > 0 ||\n authAutocompleteDisabledCount > 0 ||\n authAutocompleteSemanticMismatchCount > 0 ||\n authInputTypeMismatchCount > 0;\n const hasHardcodedSecretSignals = hardcodedSecretSignalCount > 0;\n const hasClientSecretEnvReferences = clientSecretEnvReferenceCount > 0;\n const hasLocalhostEndpoints = localhostEndpointCount > 0;\n const hasWildcardPostMessage = wildcardPostMessageCount > 0;\n const hasWindowOpenWithoutNoopener = windowOpenWithoutNoopenerCount > 0;\n const hasMessageListenerWithoutOriginCheck = messageListenerWithoutOriginCheckCount > 0;\n const hasInsecureExternalIframe = insecureExternalIframeCount > 0;\n const hasAuthStorageWrites = authStorageWriteCount > 0;\n const hasAuthStorageClearGap =\n authExitSignalCount > 0 && authStorageWriteCount > 0 && authStorageClearCount === 0;\n const hasAuthCookieWrites = authCookieWriteCount > 0;\n const hasAuthCookieClearGap =\n authExitSignalCount > 0 && authCookieWriteCount > 0 && authCookieClearCount === 0;\n const hasAuthCookieMissingHardening = authCookieMissingHardeningCount > 0;\n const hasAuthHeaderWrites = authHeaderWriteCount > 0;\n const hasAuthHeaderClearGap =\n authExitSignalCount > 0 && authHeaderWriteCount > 0 && authHeaderClearCount === 0;\n const hasAuthCacheClients = authCacheClientCount > 0;\n const hasAuthCacheClearGap =\n authExitSignalCount > 0 && authCacheClientCount > 0 && authCacheClearCount === 0;\n scores.push({\n category: 'Security Hygiene',\n focusArea: 'security-hygiene',\n score: Math.max(\n 1,\n 5 -\n (hasDangerousHtml ? 2 : 0) -\n (hasRawHtmlInjection ? 2 : 0) -\n (hasDynamicEval ? 2 : 0) -\n (hasExternalIframeWithoutSandbox ? 1 : 0) -\n (hasInsecureFormAction ? 2 : 0) -\n (hasInsecureAuthFormMethod ? 2 : 0) -\n (hasInsecureTransportEndpoint ? 2 : 0) -\n (hasInsecureExternalImage ? 1 : 0) -\n (hasHardcodedSecretSignals ? 3 : 0) -\n (hasClientSecretEnvReferences ? 3 : 0) -\n (hasLocalhostEndpoints ? 2 : 0) -\n (hasWildcardPostMessage ? 2 : 0) -\n (hasMessageListenerWithoutOriginCheck ? 2 : 0) -\n (hasWindowOpenWithoutNoopener ? 1 : 0) -\n (hasInsecureExternalIframe ? 1 : 0) -\n (hasExternalBlankLinkWithoutRel ? 1 : 0) -\n (hasAuthOpenRedirectSignals ? 2 : 0) -\n (hasAuthExternalRedirectSignals ? 2 : 0) -\n (hasAuthProviderStateMissing ? 2 : 0) -\n (hasAuthProviderPkceMissing ? 2 : 0) -\n (hasAuthProviderNonceMissing ? 2 : 0) -\n (hasAuthCallbackStateValidationGap ? 2 : 0) -\n (hasAuthCallbackStateTeardownGap ? 1 : 0) -\n (hasAuthCallbackUrlScrubGap ? 2 : 0) -\n (hasAuthAutocompleteIssues ? 1 : 0) -\n (hasAuthStorageWrites ? 2 : 0) -\n (hasAuthCookieWrites ? 2 : 0) -\n (hasAuthCookieMissingHardening ? 2 : 0) -\n (hasAuthHeaderWrites ? 2 : 0) -\n (hasAuthCacheClearGap ? 1 : 0),\n ),\n details: `dangerouslySetInnerHTML: ${dangerousHtmlCount}, raw HTML injection: ${rawHtmlInjectionCount}, dynamic eval: ${dynamicEvalCount}, hardcoded secret literals: ${hardcodedSecretSignalCount}, client-exposed secret env references: ${clientSecretEnvReferenceCount}, localhost endpoints: ${localhostEndpointCount}, wildcard postMessage calls: ${wildcardPostMessageCount}, message listeners missing origin checks: ${messageListenerWithoutOriginCheckCount}, window.open calls missing noopener/noreferrer: ${windowOpenWithoutNoopenerCount}, external iframes without sandbox: ${externalIframeWithoutSandboxCount}, insecure external iframes: ${insecureExternalIframeCount}, insecure form actions: ${insecureFormActionCount}, auth forms with insecure method: ${insecureAuthFormMethodCount}, insecure transport endpoints: ${insecureTransportEndpointCount}, insecure remote images: ${insecureExternalImageCount}, external _blank links without rel: ${externalBlankLinkWithoutRelCount}, auth/query redirect signals: ${authOpenRedirectSignalCount}, auth external redirects: ${authExternalRedirectSignalCount}, auth provider URLs missing state: ${authProviderStateMissingCount}, auth provider code flows missing PKCE: ${authProviderPkceMissingCount}, auth provider id_token flows missing nonce: ${authProviderNonceMissingCount}, auth callback state reads: ${authCallbackStateSignalCount}, auth callback state validation signals: ${authCallbackStateValidationSignalCount}, auth callback state storage reads: ${authCallbackStateStorageSignalCount}, auth callback state storage clears: ${authCallbackStateStorageClearSignalCount}, auth callback token reads: ${authCallbackTokenSignalCount}, auth callback URL scrub signals: ${authCallbackUrlScrubSignalCount}, email inputs without autocomplete: ${emailAutocompleteMissingCount}, password inputs without autocomplete: ${passwordAutocompleteMissingCount}, OTP inputs without one-time-code autocomplete: ${otpAutocompleteMissingCount}, auth inputs with autocomplete off: ${authAutocompleteDisabledCount}, auth inputs with autocomplete semantic mismatch: ${authAutocompleteSemanticMismatchCount}, auth inputs with semantic type mismatch: ${authInputTypeMismatchCount}, auth storage writes: ${authStorageWriteCount}, auth storage clears: ${authStorageClearCount}, auth cookie writes: ${authCookieWriteCount}, auth cookie clears: ${authCookieClearCount}, auth cookies missing hardening: ${authCookieMissingHardeningCount}, auth header writes: ${authHeaderWriteCount}, auth header clears: ${authHeaderClearCount}, auth cache clients: ${authCacheClientCount}, auth cache clears: ${authCacheClearCount}`,\n suggestions: [\n ...(hasDangerousHtml || hasRawHtmlInjection\n ? ['Prefer escaped rendering paths and sanitize any unavoidable HTML before rendering it.']\n : []),\n ...(hasDynamicEval\n ? [\n 'Remove eval/new Function usage and replace it with explicit logic or data-driven dispatch.',\n ]\n : []),\n ...(hasHardcodedSecretSignals\n ? [\n 'Remove hardcoded secret literals from source immediately and rotate any exposed credentials.',\n ]\n : []),\n ...(hasClientSecretEnvReferences\n ? [\n 'Do not reference service-role, secret, or private-key env vars from client-exposed code paths.',\n ]\n : []),\n ...(hasLocalhostEndpoints\n ? [\n 'Replace localhost-style client endpoints with reviewed environment-backed URLs or move those calls behind a trusted server boundary before shipping.',\n ]\n : []),\n ...(hasWildcardPostMessage\n ? [\n 'Avoid `postMessage(..., \"*\")`; target a reviewed explicit origin instead of broadcasting to any window origin.',\n ]\n : []),\n ...(hasMessageListenerWithoutOriginCheck\n ? [\n 'Validate `event.origin` inside `message` event handlers before trusting or acting on cross-window data.',\n ]\n : []),\n ...(hasWindowOpenWithoutNoopener\n ? [\n 'When opening a new tab imperatively, include `noopener,noreferrer` features so the new page cannot retain opener access.',\n ]\n : []),\n ...(hasExternalIframeWithoutSandbox\n ? [\n 'Sandbox external iframes unless a reviewed embed contract explicitly requires broader privileges.',\n ]\n : []),\n ...(hasInsecureExternalIframe\n ? [\n 'Avoid embedding remote iframes over plain HTTP; use HTTPS or move the integration behind a reviewed trusted boundary.',\n ]\n : []),\n ...(hasInsecureFormAction\n ? [\n 'Avoid posting forms to plain HTTP endpoints; use HTTPS or move the action behind a trusted server boundary.',\n ]\n : []),\n ...(hasInsecureAuthFormMethod\n ? [\n 'Auth forms should submit with `method=\"post\"` or an explicit server action boundary instead of defaulting to GET semantics.',\n ]\n : []),\n ...(hasInsecureTransportEndpoint\n ? [\n 'Avoid plain HTTP or ws:// client endpoints; use HTTPS/WSS transport or route the request behind a trusted server boundary.',\n ]\n : []),\n ...(hasInsecureExternalImage\n ? [\n 'Avoid loading remote images over plain HTTP; use HTTPS or move the image behind a reviewed trusted asset boundary.',\n ]\n : []),\n ...(hasExternalBlankLinkWithoutRel\n ? ['Add rel=\"noopener noreferrer\" to external links that open in a new tab.']\n : []),\n ...(hasAuthOpenRedirectSignals\n ? [\n 'Resolve auth or route-transition redirects through a reviewed allowlist of internal routes instead of trusting raw `next`, `returnTo`, `callbackUrl`, or similar query params.',\n ]\n : []),\n ...(hasAuthExternalRedirectSignals\n ? [\n 'Avoid hard-redirecting auth flows to external URLs from app code. Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration.',\n ]\n : []),\n ...(hasAuthProviderStateMissing\n ? [\n 'When auth flows hand off to a provider authorize URL, include a reviewed `state` value and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n ]\n : []),\n ...(hasAuthProviderPkceMissing\n ? [\n 'When client-managed auth flows hand off to a provider code-flow authorize URL, include a reviewed PKCE `code_challenge` and verifier instead of hardcoding a bare authorization-code redirect from client code.',\n ]\n : []),\n ...(hasAuthProviderNonceMissing\n ? [\n 'When auth flows hand off to a provider authorize URL that requests `id_token`, include a reviewed `nonce` and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n ]\n : []),\n ...(hasAuthCallbackStateValidationGap\n ? [\n 'When callback routes read a returned provider `state`, validate it against a stored or expected reviewed value before exchanging callback codes or continuing auth setup.',\n ]\n : []),\n ...(hasAuthCallbackStateTeardownGap\n ? [\n 'After validating callback `state`, clear the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger beyond the auth exchange.',\n ]\n : []),\n ...(hasAuthCallbackUrlScrubGap\n ? [\n 'After consuming auth callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n ]\n : []),\n ...(hasAuthAutocompleteIssues\n ? [\n 'Add explicit autocomplete hints such as `email`, `username`, `current-password`, `new-password`, or `one-time-code` on auth-related inputs, keep those hints semantically aligned with the field purpose, avoid disabling autocomplete for credential fields, and keep credential field types semantically correct (`email`/`password`).',\n ]\n : []),\n ...(hasAuthStorageWrites\n ? [\n 'Avoid persisting auth tokens in browser storage; prefer secure, server-managed session boundaries or hardened cookie-based flows.',\n ]\n : []),\n ...(hasAuthStorageClearGap\n ? [\n 'If auth data is stored in browser storage, explicitly remove those auth/session keys during sign-out instead of relying on redirects or generic sign-out helpers alone.',\n ]\n : []),\n ...(hasAuthCookieWrites\n ? [\n 'Avoid setting auth cookies from client-side JavaScript; prefer server-issued HttpOnly cookies or other server-managed session boundaries.',\n ]\n : []),\n ...(hasAuthCookieClearGap\n ? [\n 'If reviewed source surfaces issue auth cookies, explicitly expire or delete them during sign-out instead of assuming redirects or generic sign-out helpers will clear them.',\n ]\n : []),\n ...(hasAuthCookieMissingHardening\n ? [\n 'When issuing auth cookies, set explicit `httpOnly`, `secure`, and `sameSite` options instead of relying on framework defaults or partial options.',\n ]\n : []),\n ...(hasAuthHeaderWrites\n ? [\n 'Avoid constructing bearer/session authorization headers in client-rendered code unless the auth model is explicitly reviewed and intended.',\n ]\n : []),\n ...(hasAuthHeaderClearGap\n ? [\n 'If reviewed source code constructs auth-like authorization headers, explicitly delete or reset those header values during sign-out instead of assuming redirects or generic sign-out helpers will clear them.',\n ]\n : []),\n ...(hasAuthCacheClients && hasAuthCacheClearGap\n ? [\n 'If protected data is cached in query clients or client stores, clear or reset those caches during sign-out so privileged data does not linger after logout.',\n ]\n : []),\n ],\n });\n\n if (hasDangerousHtml) {\n findings.push(\n makeFinding({\n id: 'security-dangerously-set-html',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'The reviewed file uses `dangerouslySetInnerHTML`.',\n evidence: [filePath, `Occurrences: ${dangerousHtmlCount}`],\n file: filePath,\n suggestedFix:\n 'Render structured data through components instead of injecting raw HTML, or sanitize the content before it reaches the view layer.',\n }),\n );\n }\n\n if (hasRawHtmlInjection) {\n findings.push(\n makeFinding({\n id: 'security-raw-html-injection',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'The reviewed file writes raw HTML into the DOM.',\n evidence: [filePath, `Occurrences: ${rawHtmlInjectionCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid `innerHTML` and `insertAdjacentHTML`; render trusted structured nodes instead.',\n }),\n );\n }\n\n if (hasDynamicEval) {\n findings.push(\n makeFinding({\n id: 'security-dynamic-code-eval',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'The reviewed file uses dynamic code execution patterns such as `eval`, `new Function`, or string-based timers.',\n evidence: [filePath, `Occurrences: ${dynamicEvalCount}`],\n file: filePath,\n suggestedFix:\n 'Replace dynamic code execution with explicit functions, lookup tables, or validated configuration data; avoid passing strings into timers.',\n }),\n );\n }\n\n if (hasHardcodedSecretSignals) {\n findings.push(\n makeFinding({\n id: 'security-hardcoded-secret-literal',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Hardcoded secret-like literals were detected in the reviewed file.',\n evidence: [filePath, `Hardcoded secret-like literals: ${hardcodedSecretSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Remove hardcoded secrets from source immediately, rotate any exposed credentials, and load sensitive values only through reviewed server-side boundaries.',\n }),\n );\n }\n\n if (hasClientSecretEnvReferences) {\n findings.push(\n makeFinding({\n id: 'security-client-secret-env-reference',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Client-exposed code references env vars that look server-only or secret-bearing.',\n evidence: [\n filePath,\n `Client-exposed secret env references: ${clientSecretEnvReferenceCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Remove secret-bearing env references from client code and move privileged access behind a reviewed server boundary or server-only module.',\n }),\n );\n }\n\n if (hasLocalhostEndpoints) {\n findings.push(\n makeFinding({\n id: 'security-localhost-endpoint-present',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file still references localhost-style endpoints.',\n evidence: [filePath, `Localhost endpoint signals: ${localhostEndpointCount}`],\n file: filePath,\n suggestedFix:\n 'Replace localhost, 127.0.0.1, or 0.0.0.0 endpoints with reviewed environment-backed URLs or move the client call behind a trusted server boundary.',\n }),\n );\n }\n\n if (hasInsecureExternalImage) {\n findings.push(\n makeFinding({\n id: 'security-image-transport-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file loads one or more remote images over plain HTTP.',\n evidence: [filePath, `Insecure remote images: ${insecureExternalImageCount}`],\n file: filePath,\n suggestedFix:\n 'Serve remote images over HTTPS or move them behind a reviewed trusted asset boundary before shipping.',\n }),\n );\n }\n\n if (hasWildcardPostMessage) {\n findings.push(\n makeFinding({\n id: 'security-postmessage-wildcard-origin',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Cross-window messaging uses `postMessage` with a wildcard target origin.',\n evidence: [filePath, `Wildcard postMessage calls: ${wildcardPostMessageCount}`],\n file: filePath,\n suggestedFix:\n 'Replace `postMessage(..., \"*\")` with an explicit reviewed origin so messages only cross the intended trust boundary.',\n }),\n );\n }\n\n if (hasMessageListenerWithoutOriginCheck) {\n findings.push(\n makeFinding({\n id: 'security-message-listener-origin-check-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Cross-window message handlers do not appear to validate `event.origin` before trusting inbound messages.',\n evidence: [\n filePath,\n `Message listeners missing origin checks: ${messageListenerWithoutOriginCheckCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Check `event.origin` against an explicit reviewed allowlist or expected origin before acting on `message` event payloads.',\n }),\n );\n }\n\n if (hasWindowOpenWithoutNoopener) {\n findings.push(\n makeFinding({\n id: 'security-window-open-noopener-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Imperative `window.open` usage targets a new tab without `noopener,noreferrer` protections.',\n evidence: [\n filePath,\n `window.open calls missing noopener/noreferrer: ${windowOpenWithoutNoopenerCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Use `window.open(url, \"_blank\", \"noopener,noreferrer\")` or equivalent reviewed features so the opened page cannot retain opener access.',\n }),\n );\n }\n\n if (hasExternalBlankLinkWithoutRel) {\n findings.push(\n makeFinding({\n id: 'security-target-blank-rel-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External links open in a new tab without `rel=\"noopener noreferrer\"`.',\n evidence: [filePath, `Occurrences: ${externalBlankLinkWithoutRelCount}`],\n file: filePath,\n suggestedFix:\n 'Add rel=\"noopener noreferrer\" to external target=\"_blank\" links to prevent tab-nabbing and preserve opener isolation.',\n }),\n );\n }\n\n if (hasExternalIframeWithoutSandbox) {\n findings.push(\n makeFinding({\n id: 'security-iframe-sandbox-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'External iframe embeds were detected without a `sandbox` attribute.',\n evidence: [\n filePath,\n `External iframes without sandbox: ${externalIframeWithoutSandboxCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add the narrowest practical sandbox policy to external iframes, and only loosen capabilities when the embed contract explicitly requires it.',\n }),\n );\n }\n\n if (hasInsecureExternalIframe) {\n findings.push(\n makeFinding({\n id: 'security-iframe-transport-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed file embeds one or more remote iframes over plain HTTP.',\n evidence: [filePath, `Insecure external iframes: ${insecureExternalIframeCount}`],\n file: filePath,\n suggestedFix:\n 'Serve embedded iframes over HTTPS or move the integration behind a reviewed trusted boundary before shipping.',\n }),\n );\n }\n\n if (hasInsecureFormAction) {\n findings.push(\n makeFinding({\n id: 'security-form-action-insecure',\n category: 'Security Hygiene',\n severity: 'error',\n message: 'Forms were detected using insecure or unsafe action targets.',\n evidence: [\n filePath,\n `Forms with insecure or unsafe action target: ${insecureFormActionCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Use HTTPS form endpoints or route submissions through a trusted server action/API boundary; do not use javascript:, mailto:, data:, or plain HTTP form actions for production flows.',\n }),\n );\n }\n\n if (hasInsecureAuthFormMethod) {\n findings.push(\n makeFinding({\n id: 'security-auth-form-method-insecure',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Auth-like forms were detected without an explicit POST-style submission method.',\n evidence: [filePath, `Auth forms with insecure method: ${insecureAuthFormMethodCount}`],\n file: filePath,\n suggestedFix:\n 'Add `method=\"post\"` or move the submission behind an explicit server action boundary so credential flows do not default to GET semantics.',\n }),\n );\n }\n\n if (hasInsecureTransportEndpoint) {\n findings.push(\n makeFinding({\n id: 'security-transport-endpoint-insecure',\n category: 'Security Hygiene',\n severity: 'error',\n message:\n 'Client code was detected calling or navigating to plain HTTP or insecure websocket endpoints.',\n evidence: [filePath, `Insecure transport endpoints: ${insecureTransportEndpointCount}`],\n file: filePath,\n suggestedFix:\n 'Use HTTPS/WSS endpoints and reviewed secure redirects, or move the transport boundary behind a trusted server action or API layer.',\n }),\n );\n }\n\n if (hasAuthOpenRedirectSignals) {\n findings.push(\n makeFinding({\n id: 'security-auth-open-redirect-risk',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Redirect logic appears to trust next/returnTo-style query parameters without an obvious reviewed allowlist.',\n evidence: [filePath, `Auth/query redirect signals: ${authOpenRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Resolve post-auth and route-transition redirects through a reviewed internal allowlist instead of redirecting directly from raw `next`, `returnTo`, `callbackUrl`, or similar query parameters.',\n }),\n );\n }\n\n if (\n hasAuthExternalRedirectSignals &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-external-redirect-risk',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'The reviewed auth flow redirects users directly to an external URL.',\n evidence: [filePath, `Auth external redirects: ${authExternalRedirectSignalCount}`],\n file: filePath,\n suggestedFix:\n 'Keep auth redirects on reviewed internal routes, or route external provider/logout handoffs through explicit reviewed allowlists and provider configuration instead of hardcoding off-site destinations in app code.',\n }),\n );\n }\n\n if (\n hasAuthProviderStateMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-state-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style authorize URL without a `state` parameter.',\n evidence: [filePath, `Auth provider URLs missing state: ${authProviderStateMissingCount}`],\n file: filePath,\n suggestedFix:\n 'Add a reviewed `state` value to external provider authorize URLs and validate it on return instead of hardcoding off-site auth entry without CSRF protection.',\n }),\n );\n }\n\n if (\n hasAuthProviderPkceMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-pkce-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style OAuth code-flow URL without a `code_challenge`.',\n evidence: [\n filePath,\n `Auth provider code flows missing PKCE: ${authProviderPkceMissingCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add a reviewed PKCE `code_challenge` and verifier to external provider code flows instead of hardcoding a bare authorization-code redirect from client code.',\n }),\n );\n }\n\n if (\n hasAuthProviderNonceMissing &&\n (signInFlowSignals > 0 ||\n signUpFlowSignals > 0 ||\n recoveryFlowSignals > 0 ||\n authExitSignalCount > 0)\n ) {\n findings.push(\n makeFinding({\n id: 'security-auth-provider-nonce-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth flow hardcodes a provider-style OIDC id_token URL without a `nonce` parameter.',\n evidence: [\n filePath,\n `Auth provider id_token flows missing nonce: ${authProviderNonceMissingCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add a reviewed `nonce` value to external provider authorize URLs that request `id_token`, and validate it on return instead of hardcoding a bare OIDC implicit or hybrid flow from client code.',\n }),\n );\n }\n\n if (hasAuthCallbackStateValidationGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-state-validation-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth callback flow reads a returned provider `state` value but does not show an obvious validation step against a reviewed expected value.',\n evidence: [\n filePath,\n `Auth callback state reads: ${authCallbackStateSignalCount}`,\n `Auth callback state validation signals: ${authCallbackStateValidationSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'When callback routes read `state`, compare it against a stored or expected reviewed value before exchanging callback codes or continuing auth/session setup.',\n }),\n );\n }\n\n if (hasAuthCallbackStateTeardownGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-state-teardown-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'The reviewed auth callback flow validates stored callback `state` but does not show that the stored state key is cleared afterwards.',\n evidence: [\n filePath,\n `Auth callback state storage reads: ${authCallbackStateStorageSignalCount}`,\n `Auth callback state storage clears: ${authCallbackStateStorageClearSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After validating callback `state`, remove the reviewed `oauth_state` or CSRF state key from browser storage or cookies so stale callback state does not linger.',\n }),\n );\n }\n\n if (hasAuthCallbackUrlScrubGap) {\n findings.push(\n makeFinding({\n id: 'security-auth-callback-url-scrub-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'The reviewed auth callback flow appears to read codes, tokens, or provider error params from the URL without scrubbing them back out of browser history.',\n evidence: [\n filePath,\n `Auth callback token reads: ${authCallbackTokenSignalCount}`,\n `Auth callback error signals: ${authCallbackErrorSignalCount}`,\n `Auth callback URL scrub signals: ${authCallbackUrlScrubSignalCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'After consuming callback codes, tokens, or provider error params from the URL, replace the callback URL with a clean reviewed route using `history.replaceState`, router replacement, or an explicit internal redirect.',\n }),\n );\n }\n\n if (hasAuthAutocompleteIssues) {\n findings.push(\n makeFinding({\n id: 'security-auth-autocomplete-missing',\n category: 'Security Hygiene',\n severity: 'info',\n message:\n 'Auth-related inputs were detected with missing or incorrect `autocomplete` hints.',\n evidence: [\n filePath,\n `Email inputs without autocomplete: ${emailAutocompleteMissingCount}`,\n `Password inputs without autocomplete: ${passwordAutocompleteMissingCount}`,\n `OTP inputs without one-time-code autocomplete: ${otpAutocompleteMissingCount}`,\n `Auth inputs with autocomplete off: ${authAutocompleteDisabledCount}`,\n `Auth inputs with autocomplete semantic mismatch: ${authAutocompleteSemanticMismatchCount}`,\n `Auth inputs with semantic type mismatch: ${authInputTypeMismatchCount}`,\n ],\n file: filePath,\n suggestedFix:\n 'Add `autocomplete=\"email\"` or `autocomplete=\"username\"` to identity fields, `autocomplete=\"current-password\"` or `autocomplete=\"new-password\"` to password fields, `autocomplete=\"one-time-code\"` to OTP and verification-code inputs, keep those autocomplete values aligned with the field purpose, do not disable autocomplete on credential inputs, and keep credential field types semantically correct.',\n }),\n );\n }\n\n if (hasAuthStorageWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-storage-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Potential auth credentials were written into browser storage.',\n evidence: [filePath, `Auth-like local/session storage writes: ${authStorageWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid writing tokens or sessions to localStorage/sessionStorage; prefer secure server-managed sessions or hardened cookie flows.',\n }),\n );\n }\n\n if (hasAuthCookieWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-cookie-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Potential auth credentials were written into client-managed cookies.',\n evidence: [filePath, `Auth-like cookie writes: ${authCookieWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Avoid setting auth cookies from client-side code; prefer server-issued HttpOnly cookies or other server-managed session mechanisms.',\n }),\n );\n }\n\n if (hasAuthCookieMissingHardening) {\n findings.push(\n makeFinding({\n id: 'security-auth-cookie-hardening-missing',\n category: 'Security Hygiene',\n severity: 'warn',\n message:\n 'Auth cookies are being issued without explicit `httpOnly`, `secure`, and `sameSite` hardening.',\n evidence: [filePath, `Auth cookies missing hardening: ${authCookieMissingHardeningCount}`],\n file: filePath,\n suggestedFix:\n 'Set auth cookies with explicit `httpOnly: true`, `secure: true`, and a reviewed `sameSite` value so session boundaries do not rely on ambient defaults.',\n }),\n );\n }\n\n if (hasAuthHeaderWrites) {\n findings.push(\n makeFinding({\n id: 'security-auth-header-write',\n category: 'Security Hygiene',\n severity: 'warn',\n message: 'Auth-like authorization headers were constructed in client-side code.',\n evidence: [filePath, `Auth-like header writes: ${authHeaderWriteCount}`],\n file: filePath,\n suggestedFix:\n 'Prefer server-managed sessions or a deliberately reviewed client-auth strategy instead of assembling bearer/session headers ad hoc in client-rendered code.',\n }),\n );\n }\n\n const overall =\n Math.round((scores.reduce((sum, score) => sum + score.score, 0) / scores.length) * 10) / 10;\n return {\n $schema: VERIFICATION_SCHEMA_URLS.fileCritique,\n file: filePath,\n overall,\n scores,\n findings,\n focusAreas,\n reviewPack,\n };\n}\n\nfunction resolveProjectFilePath(projectRoot: string, filePath: string): string {\n const root = existsSync(projectRoot) ? realpathSync.native(projectRoot) : resolve(projectRoot);\n const candidatePath = isAbsolute(filePath) ? resolve(filePath) : resolve(root, filePath);\n const resolvedPath = existsSync(candidatePath)\n ? realpathSync.native(candidatePath)\n : candidatePath;\n const relativePath = relative(root, resolvedPath);\n\n if (relativePath.startsWith('..') || isAbsolute(relativePath)) {\n throw new Error(`Path escapes the project root: ${filePath}`);\n }\n\n return resolvedPath;\n}\n\nexport async function critiqueFile(\n filePath: string,\n projectRoot: string,\n): Promise<FileCritiqueReport> {\n const resolvedPath = resolveProjectFilePath(projectRoot, filePath);\n const code = await readFile(resolvedPath, 'utf-8');\n const treatmentsCss = readTextIfExists(join(projectRoot, 'src', 'styles', 'treatments.css'));\n const reviewPack = loadReviewPack(projectRoot);\n const packManifest = loadPackManifest(projectRoot);\n const adoptionMode = readProjectAdoptionMode(projectRoot);\n\n return critiqueSource({\n filePath: resolvedPath,\n code,\n reviewPack,\n packManifest,\n treatmentsCss,\n adoptionMode,\n });\n}\n","import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { extname, join, normalize } from 'node:path';\n\nconst CONTENT_TYPES = {\n '.css': 'text/css; charset=utf-8',\n '.html': 'text/html; charset=utf-8',\n '.js': 'text/javascript; charset=utf-8',\n '.json': 'application/json; charset=utf-8',\n '.svg': 'image/svg+xml',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.webp': 'image/webp',\n} as const;\n\nexport interface RuntimeAudit {\n distPresent: boolean;\n indexPresent: boolean;\n checked: boolean;\n passed: boolean | null;\n rootDocumentOk: boolean;\n titleOk: boolean;\n langOk: boolean;\n viewportOk: boolean;\n charsetOk: boolean;\n cspSignalOk: boolean;\n inlineScriptCount: number;\n inlineEventHandlerCount: number;\n externalScriptsWithoutIntegrityCount: number;\n externalScriptsWithIntegrityMissingCrossoriginCount: number;\n externalStylesheetsWithoutIntegrityCount: number;\n externalStylesheetsWithIntegrityMissingCrossoriginCount: number;\n externalScriptsWithInsecureTransportCount: number;\n externalStylesheetsWithInsecureTransportCount: number;\n externalMediaSourcesWithInsecureTransportCount: number;\n externalBlankLinksWithoutRelCount: number;\n externalIframesWithoutSandboxCount: number;\n externalIframesWithInsecureTransportCount: number;\n jsEvalSignalCount: number;\n jsHtmlInjectionSignalCount: number;\n jsInsecureTransportSignalCount: number;\n jsSecretSignalCount: number;\n assetCount: number;\n assetsPassed: number;\n routeHintsChecked: string[];\n routeHintsMatched: number;\n routeHintsCoverageOk: boolean;\n routeDocumentsChecked: number;\n routeDocumentsPassed: number;\n routeDocumentsHardenedCount: number;\n routeDocumentsCoverageOk: boolean;\n routeDocumentsHardeningOk: boolean;\n fullRouteCoverageOk: boolean;\n totalAssetBytes: number;\n jsAssetBytes: number;\n cssAssetBytes: number;\n largestAssetPath: string | null;\n largestAssetBytes: number;\n failures: string[];\n}\n\nexport interface BuiltDistAuditOptions {\n distDir?: string;\n routeHints?: string[];\n}\n\nexport function emptyRuntimeAudit(failures: string[] = []): RuntimeAudit {\n return {\n distPresent: false,\n indexPresent: false,\n checked: false,\n passed: null,\n rootDocumentOk: false,\n titleOk: false,\n langOk: false,\n viewportOk: false,\n charsetOk: false,\n cspSignalOk: false,\n inlineScriptCount: 0,\n inlineEventHandlerCount: 0,\n externalScriptsWithoutIntegrityCount: 0,\n externalScriptsWithIntegrityMissingCrossoriginCount: 0,\n externalStylesheetsWithoutIntegrityCount: 0,\n externalStylesheetsWithIntegrityMissingCrossoriginCount: 0,\n externalScriptsWithInsecureTransportCount: 0,\n externalStylesheetsWithInsecureTransportCount: 0,\n externalMediaSourcesWithInsecureTransportCount: 0,\n externalBlankLinksWithoutRelCount: 0,\n externalIframesWithoutSandboxCount: 0,\n externalIframesWithInsecureTransportCount: 0,\n jsEvalSignalCount: 0,\n jsHtmlInjectionSignalCount: 0,\n jsInsecureTransportSignalCount: 0,\n jsSecretSignalCount: 0,\n assetCount: 0,\n assetsPassed: 0,\n routeHintsChecked: [],\n routeHintsMatched: 0,\n routeHintsCoverageOk: false,\n routeDocumentsChecked: 0,\n routeDocumentsPassed: 0,\n routeDocumentsHardenedCount: 0,\n routeDocumentsCoverageOk: false,\n routeDocumentsHardeningOk: false,\n fullRouteCoverageOk: false,\n totalAssetBytes: 0,\n jsAssetBytes: 0,\n cssAssetBytes: 0,\n largestAssetPath: null,\n largestAssetBytes: 0,\n failures,\n };\n}\n\nfunction getContentType(pathname: string): string {\n return (\n CONTENT_TYPES[extname(pathname) as keyof typeof CONTENT_TYPES] ?? 'application/octet-stream'\n );\n}\n\nfunction extractAssetPaths(indexHtml: string): string[] {\n const assetPaths = new Set<string>();\n\n for (const match of indexHtml.matchAll(/<(?:script|link)[^>]+(?:src|href)=\"([^\"]+)\"/g)) {\n const assetPath = match[1];\n const assetsIndex = assetPath.indexOf('/assets/');\n if (assetsIndex === -1) continue;\n assetPaths.add(assetPath.slice(assetsIndex));\n }\n\n return [...assetPaths];\n}\n\nfunction countInlineScriptTags(html: string): number {\n return html.match(/<script\\b(?:(?!\\bsrc=)[^>])*>/gi)?.length ?? 0;\n}\n\nfunction countInlineEventHandlerAttributes(html: string): number {\n return html.match(/\\son[a-z][a-z0-9_-]*\\s*=/gi)?.length ?? 0;\n}\n\nfunction countExternalScriptsWithoutIntegrity(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.src) && !entry.hasIntegrity).length;\n}\n\nfunction countExternalScriptsWithIntegrityMissingCrossorigin(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n hasCrossorigin: /\\bcrossorigin\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) => /^https?:\\/\\//i.test(entry.src) && entry.hasIntegrity && !entry.hasCrossorigin,\n ).length;\n}\n\nfunction countExternalScriptsWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<script\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => match[3])\n .filter((src) => /^http:\\/\\//i.test(src)).length;\n}\n\nfunction countExternalStylesheetsWithoutIntegrity(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) =>\n /^https?:\\/\\//i.test(entry.href) &&\n /\\bstylesheet\\b/i.test(entry.relValue) &&\n !entry.hasIntegrity,\n ).length;\n}\n\nfunction countExternalStylesheetsWithIntegrityMissingCrossorigin(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n hasIntegrity: /\\bintegrity\\s*=/i.test(attrs),\n hasCrossorigin: /\\bcrossorigin\\s*=/i.test(attrs),\n };\n })\n .filter(\n (entry) =>\n /^https?:\\/\\//i.test(entry.href) &&\n /\\bstylesheet\\b/i.test(entry.relValue) &&\n entry.hasIntegrity &&\n !entry.hasCrossorigin,\n ).length;\n}\n\nfunction countExternalStylesheetsWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<link\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n const relValue = relMatch?.[2]?.toLowerCase() ?? '';\n return {\n href: match[3],\n relValue,\n };\n })\n .filter((entry) => /^http:\\/\\//i.test(entry.href) && /\\bstylesheet\\b/i.test(entry.relValue))\n .length;\n}\n\nfunction extractHtmlAttributeValues(attrs: string, attributeNames: string[]): string[] {\n const values: string[] = [];\n for (const attributeName of attributeNames) {\n const pattern = new RegExp(`\\\\b${attributeName}\\\\s*=\\\\s*([\"'])([^\"']+)\\\\1`, 'gi');\n for (const match of attrs.matchAll(pattern)) {\n values.push(match[2]);\n }\n }\n return values;\n}\n\nfunction valueContainsInsecureRemoteAsset(value: string | null | undefined): boolean {\n if (!value) return false;\n return value\n .split(',')\n .map((candidate) => candidate.trim().split(/\\s+/)[0] ?? '')\n .some((candidate) => /^http:\\/\\//i.test(candidate));\n}\n\nfunction countExternalMediaSourcesWithInsecureTransport(html: string): number {\n let count = 0;\n\n for (const match of html.matchAll(/<(img|source|video|audio)\\b([^>]*)>/gi)) {\n const tagName = match[1]?.toLowerCase();\n const attrs = match[2] ?? '';\n const attributeNames =\n tagName === 'video' ? ['src', 'poster'] : tagName === 'audio' ? ['src'] : ['src', 'srcset'];\n const hasInsecureTransport = extractHtmlAttributeValues(attrs, attributeNames).some((value) =>\n valueContainsInsecureRemoteAsset(value),\n );\n if (hasInsecureTransport) {\n count += 1;\n }\n }\n\n return count;\n}\n\nfunction countExternalBlankLinksWithoutRel(html: string): number {\n return [...html.matchAll(/<a\\b([^>]*?)\\bhref=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n const targetMatch = attrs.match(/\\btarget=([\"'])([^\"']+)\\1/i);\n const relMatch = attrs.match(/\\brel=([\"'])([^\"']+)\\1/i);\n return {\n href: match[3],\n target: targetMatch?.[2]?.toLowerCase() ?? '',\n rel: relMatch?.[2] ?? '',\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.href) && entry.target === '_blank')\n .filter((entry) => !/\\bnoopener\\b/i.test(entry.rel) || !/\\bnoreferrer\\b/i.test(entry.rel))\n .length;\n}\n\nfunction countExternalIframesWithoutSandbox(html: string): number {\n return [...html.matchAll(/<iframe\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => {\n const attrs = `${match[1] ?? ''} ${match[4] ?? ''}`;\n return {\n src: match[3],\n hasSandbox: /\\bsandbox(?:\\s*=|\\b)/i.test(attrs),\n };\n })\n .filter((entry) => /^https?:\\/\\//i.test(entry.src) && !entry.hasSandbox).length;\n}\n\nfunction countExternalIframesWithInsecureTransport(html: string): number {\n return [...html.matchAll(/<iframe\\b([^>]*?)\\bsrc=([\"'])([^\"']+)\\2([^>]*)>/gi)]\n .map((match) => match[3])\n .filter((src) => /^http:\\/\\//i.test(src)).length;\n}\n\nfunction countDynamicCodeSignals(js: string): number {\n return js.match(/\\beval\\s*\\(|\\bnew Function\\s*\\(/g)?.length ?? 0;\n}\n\nfunction countHtmlInjectionSignals(js: string): number {\n return (\n js.match(\n /\\bdangerouslySetInnerHTML\\b|\\b(?:innerHTML|outerHTML)\\s*=|\\binsertAdjacentHTML\\s*\\(|\\bdocument\\.write\\s*\\(/g,\n )?.length ?? 0\n );\n}\n\nfunction countInsecureTransportSignals(js: string): number {\n return (\n js.match(\n /\\b(?:http|ws):\\/\\/[^\\s'\"`]+|\\b(?:localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)(?::\\d+)?(?:\\/[^\\s'\"`]*)?/g,\n )?.length ?? 0\n );\n}\n\nfunction countSecretLeakSignals(js: string): number {\n const patterns = [\n /\\b(?:SUPABASE_SERVICE_ROLE_KEY|SUPABASE_SERVICE_ROLE|SERVICE_ROLE_KEY)\\b/g,\n /\\bsk_live_[0-9A-Za-z]+\\b/g,\n /-----BEGIN [A-Z ]*PRIVATE KEY-----/g,\n ];\n\n return patterns.reduce((count, pattern) => count + (js.match(pattern)?.length ?? 0), 0);\n}\n\nfunction collectFiles(rootDir: string, predicate: (filePath: string) => boolean): string[] {\n if (!existsSync(rootDir)) return [];\n const files: string[] = [];\n\n const walk = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const path = join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(path);\n continue;\n }\n if (entry.isFile() && predicate(path)) {\n files.push(path);\n }\n }\n };\n\n walk(rootDir);\n return files.sort();\n}\n\nfunction auditNextBuildOutput(projectRoot: string): RuntimeAudit {\n const nextDir = join(projectRoot, '.next');\n const buildIdPresent = existsSync(join(nextDir, 'BUILD_ID'));\n const buildManifestPresent = existsSync(join(nextDir, 'build-manifest.json'));\n const appServerDir = join(nextDir, 'server', 'app');\n const htmlFiles = collectFiles(appServerDir, (filePath) => {\n const relativePath = filePath.slice(appServerDir.length + 1).replace(/\\\\/g, '/');\n return filePath.endsWith('.html') && !relativePath.startsWith('_');\n });\n const htmlDocuments = htmlFiles.map((filePath) => readFileSync(filePath, 'utf-8'));\n const staticAssetFiles = collectFiles(join(nextDir, 'static'), (filePath) =>\n /\\.(?:js|css|json|svg|png|jpe?g|webp)$/i.test(filePath),\n );\n\n let totalAssetBytes = 0;\n let jsAssetBytes = 0;\n let cssAssetBytes = 0;\n let largestAssetPath: string | null = null;\n let largestAssetBytes = 0;\n let combinedJs = '';\n\n for (const assetFile of staticAssetFiles) {\n const byteLength = statSync(assetFile).size;\n const assetPath = `/_next/static/${assetFile.slice(join(nextDir, 'static').length + 1).replace(/\\\\/g, '/')}`;\n totalAssetBytes += byteLength;\n if (assetFile.endsWith('.js')) {\n jsAssetBytes += byteLength;\n combinedJs += readFileSync(assetFile, 'utf-8');\n }\n if (assetFile.endsWith('.css')) {\n cssAssetBytes += byteLength;\n }\n if (byteLength > largestAssetBytes) {\n largestAssetBytes = byteLength;\n largestAssetPath = assetPath;\n }\n }\n\n const hasHtmlDocuments = htmlDocuments.length > 0;\n const titleOk =\n !hasHtmlDocuments || htmlDocuments.every((html) => /<title>[^<]+<\\/title>/i.test(html));\n const langOk =\n !hasHtmlDocuments ||\n htmlDocuments.every((html) => /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(html));\n const viewportOk =\n !hasHtmlDocuments ||\n htmlDocuments.every((html) => /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(html));\n const charsetOk =\n !hasHtmlDocuments || htmlDocuments.every((html) => /<meta[^>]+charset=/i.test(html));\n const failures: string[] = ['next-build-output'];\n\n if (!buildIdPresent) {\n failures.push('next-build-id-missing');\n }\n if (!buildManifestPresent) {\n failures.push('next-build-manifest-missing');\n }\n if (staticAssetFiles.length === 0) {\n failures.push('next-assets-missing');\n }\n\n const passed = buildIdPresent && buildManifestPresent && staticAssetFiles.length > 0;\n\n return {\n distPresent: true,\n indexPresent: true,\n checked: true,\n passed,\n rootDocumentOk: hasHtmlDocuments || passed,\n titleOk,\n langOk,\n viewportOk,\n charsetOk,\n cspSignalOk: true,\n inlineScriptCount: 0,\n inlineEventHandlerCount: 0,\n externalScriptsWithoutIntegrityCount: 0,\n externalScriptsWithIntegrityMissingCrossoriginCount: 0,\n externalStylesheetsWithoutIntegrityCount: 0,\n externalStylesheetsWithIntegrityMissingCrossoriginCount: 0,\n externalScriptsWithInsecureTransportCount: 0,\n externalStylesheetsWithInsecureTransportCount: 0,\n externalMediaSourcesWithInsecureTransportCount: 0,\n externalBlankLinksWithoutRelCount: 0,\n externalIframesWithoutSandboxCount: 0,\n externalIframesWithInsecureTransportCount: 0,\n jsEvalSignalCount: countDynamicCodeSignals(combinedJs),\n jsHtmlInjectionSignalCount: countHtmlInjectionSignals(combinedJs),\n jsInsecureTransportSignalCount: countInsecureTransportSignals(combinedJs),\n jsSecretSignalCount: countSecretLeakSignals(combinedJs),\n assetCount: staticAssetFiles.length,\n assetsPassed: staticAssetFiles.length,\n routeHintsChecked: [],\n routeHintsMatched: 0,\n routeHintsCoverageOk: true,\n routeDocumentsChecked: 0,\n routeDocumentsPassed: 0,\n routeDocumentsHardenedCount: 0,\n routeDocumentsCoverageOk: true,\n routeDocumentsHardeningOk: true,\n fullRouteCoverageOk: true,\n totalAssetBytes,\n jsAssetBytes,\n cssAssetBytes,\n largestAssetPath,\n largestAssetBytes,\n failures,\n };\n}\n\nfunction normalizeRouteHint(route: string | null | undefined): string {\n if (!route || route === '/') return '/';\n const dynamicIndex = route.indexOf('/:');\n if (dynamicIndex !== -1) {\n return route.slice(0, dynamicIndex + 1);\n }\n return route;\n}\n\nfunction isNextProject(projectRoot: string): boolean {\n if (\n existsSync(join(projectRoot, 'next.config.js')) ||\n existsSync(join(projectRoot, 'next.config.ts')) ||\n existsSync(join(projectRoot, 'next.config.mjs')) ||\n existsSync(join(projectRoot, 'next.config.cjs'))\n ) {\n return true;\n }\n try {\n const pkg = JSON.parse(readFileSync(join(projectRoot, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n return Boolean(pkg.dependencies?.next || pkg.devDependencies?.next);\n } catch {\n return false;\n }\n}\n\nasync function startStaticServer(\n rootDir: string,\n): Promise<{ baseUrl: string; close: () => Promise<void> }> {\n const server = createServer((req, res) => {\n const requestedUrl = new URL(req.url ?? '/', 'http://127.0.0.1');\n const pathname = requestedUrl.pathname === '/' ? '/index.html' : requestedUrl.pathname;\n const relativePath = normalize(pathname)\n .replace(/^[/\\\\]+/, '')\n .replace(/^(\\.\\.[/\\\\])+/, '');\n const filePath = join(rootDir, relativePath);\n const fallbackPath = join(rootDir, 'index.html');\n\n try {\n if (existsSync(filePath)) {\n res.statusCode = 200;\n res.setHeader('Content-Type', getContentType(filePath));\n res.end(readFileSync(filePath));\n return;\n }\n\n if (existsSync(fallbackPath)) {\n res.statusCode = 200;\n res.setHeader('Content-Type', 'text/html; charset=utf-8');\n res.end(readFileSync(fallbackPath));\n return;\n }\n\n res.statusCode = 404;\n res.end('Not found');\n } catch {\n res.statusCode = 500;\n res.end('Internal server error');\n }\n });\n\n await new Promise<void>((resolvePromise, reject) => {\n server.once('error', reject);\n server.listen(0, '127.0.0.1', () => resolvePromise());\n });\n\n const address = server.address();\n if (!address || typeof address === 'string') {\n server.close();\n throw new Error('Failed to bind runtime audit server.');\n }\n\n return {\n baseUrl: `http://127.0.0.1:${address.port}`,\n async close() {\n await new Promise<void>((resolvePromise, reject) =>\n server.close((error) => (error ? reject(error) : resolvePromise())),\n );\n },\n };\n}\n\nexport async function auditBuiltDist(\n projectRoot: string,\n options: BuiltDistAuditOptions = {},\n): Promise<RuntimeAudit> {\n const distDir = options.distDir ?? join(projectRoot, 'dist');\n if (!existsSync(distDir)) {\n if (!options.distDir && existsSync(join(projectRoot, '.next'))) {\n return auditNextBuildOutput(projectRoot);\n }\n return emptyRuntimeAudit(['dist-missing']);\n }\n\n const indexPath = join(distDir, 'index.html');\n if (!existsSync(indexPath)) {\n return {\n ...emptyRuntimeAudit(['index-missing']),\n distPresent: true,\n };\n }\n\n const routeHints =\n Array.isArray(options.routeHints) && options.routeHints.length > 0\n ? options.routeHints\n .map((route) => normalizeRouteHint(route))\n .filter(Boolean)\n .slice(0, 8)\n : ['/'];\n const frameworkDocumentOutput = isNextProject(projectRoot);\n const indexHtml = readFileSync(indexPath, 'utf-8');\n const assetPaths = extractAssetPaths(indexHtml);\n const server = await startStaticServer(distDir);\n\n try {\n const rootResponse = await fetch(`${server.baseUrl}/`);\n const rootHtml = await rootResponse.text();\n const failures: string[] = frameworkDocumentOutput ? ['next-build-output'] : [];\n const rootDocumentOk =\n rootResponse.ok && (frameworkDocumentOutput || /id=\"root\"/.test(rootHtml));\n const titleOk = /<title>[^<]+<\\/title>/i.test(rootHtml);\n const langOk = /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(rootHtml);\n const viewportOk = /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(rootHtml);\n const charsetOk = /<meta[^>]+charset=/i.test(rootHtml);\n const cspSignalOk = /<meta[^>]+http-equiv=([\"'])Content-Security-Policy\\1/i.test(rootHtml);\n const inlineScriptCount = countInlineScriptTags(rootHtml);\n const inlineEventHandlerCount = countInlineEventHandlerAttributes(rootHtml);\n const externalScriptsWithoutIntegrityCount = countExternalScriptsWithoutIntegrity(rootHtml);\n const externalScriptsWithIntegrityMissingCrossoriginCount =\n countExternalScriptsWithIntegrityMissingCrossorigin(rootHtml);\n const externalStylesheetsWithoutIntegrityCount =\n countExternalStylesheetsWithoutIntegrity(rootHtml);\n const externalStylesheetsWithIntegrityMissingCrossoriginCount =\n countExternalStylesheetsWithIntegrityMissingCrossorigin(rootHtml);\n const externalScriptsWithInsecureTransportCount =\n countExternalScriptsWithInsecureTransport(rootHtml);\n const externalStylesheetsWithInsecureTransportCount =\n countExternalStylesheetsWithInsecureTransport(rootHtml);\n const externalMediaSourcesWithInsecureTransportCount =\n countExternalMediaSourcesWithInsecureTransport(rootHtml);\n const externalBlankLinksWithoutRelCount = countExternalBlankLinksWithoutRel(rootHtml);\n const externalIframesWithoutSandboxCount = countExternalIframesWithoutSandbox(rootHtml);\n const externalIframesWithInsecureTransportCount =\n countExternalIframesWithInsecureTransport(rootHtml);\n\n if (!rootDocumentOk) {\n failures.push('root-document-invalid');\n }\n if (!titleOk) {\n failures.push('root-title-missing');\n }\n if (!langOk) {\n failures.push('root-lang-missing');\n }\n if (!viewportOk) {\n failures.push('root-viewport-missing');\n }\n if (assetPaths.length === 0) {\n failures.push('assets-missing');\n }\n\n let assetsPassed = 0;\n let combinedJs = '';\n let totalAssetBytes = 0;\n let jsAssetBytes = 0;\n let cssAssetBytes = 0;\n let largestAssetPath: string | null = null;\n let largestAssetBytes = 0;\n\n for (const assetPath of assetPaths) {\n const response = await fetch(`${server.baseUrl}${assetPath}`);\n const body = await response.text();\n const byteLength = Buffer.byteLength(body, 'utf-8');\n\n if (response.ok && body.length > 0) {\n assetsPassed += 1;\n totalAssetBytes += byteLength;\n if (assetPath.endsWith('.js')) {\n jsAssetBytes += byteLength;\n }\n if (assetPath.endsWith('.css')) {\n cssAssetBytes += byteLength;\n }\n if (byteLength > largestAssetBytes) {\n largestAssetBytes = byteLength;\n largestAssetPath = assetPath;\n }\n } else {\n failures.push(`asset-fetch-failed:${assetPath}`);\n }\n\n if (assetPath.endsWith('.js')) {\n combinedJs += body;\n }\n }\n\n const routeHintsMatched = routeHints.filter((routeHint) =>\n combinedJs.includes(routeHint),\n ).length;\n const routeHintsCoverageOk = routeHints.length === 0 || routeHintsMatched === routeHints.length;\n const jsEvalSignalCount = countDynamicCodeSignals(combinedJs);\n const jsHtmlInjectionSignalCount = countHtmlInjectionSignals(combinedJs);\n const jsInsecureTransportSignalCount = countInsecureTransportSignals(combinedJs);\n const jsSecretSignalCount = countSecretLeakSignals(combinedJs);\n if (routeHints.length > 0 && routeHintsMatched < Math.min(2, routeHints.length)) {\n failures.push('route-hints-missing');\n }\n\n let routeDocumentsPassed = 0;\n let routeDocumentsHardenedCount = 0;\n for (const routeHint of routeHints) {\n const routeResponse = await fetch(`${server.baseUrl}${routeHint}`);\n const routeHtml = await routeResponse.text();\n const routeRootDocumentOk =\n routeResponse.ok && (frameworkDocumentOutput || /id=\"root\"/.test(routeHtml));\n const routeTitleOk = /<title>[^<]+<\\/title>/i.test(routeHtml);\n const routeLangOk = /<html[^>]*\\slang=([\"'])[^\"']+\\1/i.test(routeHtml);\n const routeViewportOk = /<meta[^>]+name=([\"'])viewport\\1[^>]*>/i.test(routeHtml);\n const routeCharsetOk = /<meta[^>]+charset=/i.test(routeHtml);\n if (routeRootDocumentOk) {\n routeDocumentsPassed += 1;\n if (routeTitleOk && routeLangOk && routeViewportOk && routeCharsetOk) {\n routeDocumentsHardenedCount += 1;\n } else {\n failures.push(`route-document-hardening-failed:${routeHint}`);\n }\n } else {\n failures.push(`route-document-failed:${routeHint}`);\n }\n }\n\n const routeDocumentsChecked = routeHints.length;\n const routeDocumentsCoverageOk =\n routeDocumentsChecked === 0 || routeDocumentsPassed === routeDocumentsChecked;\n const routeDocumentsHardeningOk =\n routeDocumentsChecked === 0 || routeDocumentsHardenedCount === routeDocumentsChecked;\n const fullRouteCoverageOk = routeHintsCoverageOk && routeDocumentsCoverageOk;\n if (routeDocumentsChecked > 0 && routeDocumentsPassed < Math.min(2, routeDocumentsChecked)) {\n failures.push('route-documents-missing');\n }\n if (\n routeDocumentsChecked > 0 &&\n routeDocumentsHardenedCount < Math.min(2, routeDocumentsChecked)\n ) {\n failures.push('route-documents-hardening-missing');\n }\n\n const passed =\n rootDocumentOk &&\n titleOk &&\n assetPaths.length > 0 &&\n assetsPassed === assetPaths.length &&\n (routeDocumentsChecked === 0 || routeDocumentsPassed >= Math.min(2, routeDocumentsChecked)) &&\n (routeHints.length === 0 || routeHintsMatched >= Math.min(2, routeHints.length));\n\n return {\n distPresent: true,\n indexPresent: true,\n checked: true,\n passed,\n rootDocumentOk,\n titleOk,\n langOk,\n viewportOk,\n charsetOk,\n cspSignalOk,\n inlineScriptCount,\n inlineEventHandlerCount,\n externalScriptsWithoutIntegrityCount,\n externalScriptsWithIntegrityMissingCrossoriginCount,\n externalStylesheetsWithoutIntegrityCount,\n externalStylesheetsWithIntegrityMissingCrossoriginCount,\n externalScriptsWithInsecureTransportCount,\n externalStylesheetsWithInsecureTransportCount,\n externalMediaSourcesWithInsecureTransportCount,\n externalBlankLinksWithoutRelCount,\n externalIframesWithoutSandboxCount,\n externalIframesWithInsecureTransportCount,\n jsEvalSignalCount,\n jsHtmlInjectionSignalCount,\n jsInsecureTransportSignalCount,\n jsSecretSignalCount,\n assetCount: assetPaths.length,\n assetsPassed,\n routeHintsChecked: routeHints,\n routeHintsMatched,\n routeHintsCoverageOk,\n routeDocumentsChecked,\n routeDocumentsPassed,\n routeDocumentsHardenedCount,\n routeDocumentsCoverageOk,\n routeDocumentsHardeningOk,\n fullRouteCoverageOk,\n totalAssetBytes,\n jsAssetBytes,\n cssAssetBytes,\n largestAssetPath,\n largestAssetBytes,\n failures,\n };\n } finally {\n await server.close();\n }\n}\n","/**\n * Experiential interaction verifier.\n *\n * Scans generated source files for evidence that declared `interactions[]`\n * (from pattern.v2.json) are actually implemented. This is the enforcement\n * layer that converts the structural-vs-experiential gap (user audit:\n * \"experiential reads like guidance, nothing fails when I skip it\") into\n * a hard-edged structural check, on par with the other guard rules.\n *\n * Scanner is intentionally simple: regex/substring signal matching, not\n * full AST analysis. Each interaction defines one or more signals that\n * MUST appear somewhere in the project source. A signal is either:\n * - a CSS class name (e.g., `d-pulse` for status-pulse)\n * - a regex (e.g., /onPointer(Down|Move)/ for drag-nodes)\n * If no signal matches, the interaction is marked as \"missing\" and the\n * guard rule emits a violation.\n *\n * Why grep, not AST: scaffolds use diverse file shapes (JSX, MDX, plain\n * HTML in marketing sites). A regex scan handles all of them; a real AST\n * matcher would need framework-specific parsers per blueprint kind. Grep\n * gets us 80% of the value at 10% of the complexity.\n */\n\n/** Either a literal substring or a regex pattern. */\nexport type InteractionSignal = string | RegExp;\n\nexport interface InteractionRequirement {\n /** The interaction name from pattern.v2.json's enum. */\n interaction: string;\n /**\n * One or more signals; ANY match satisfies the requirement. Allows\n * authors flexibility — e.g., either `d-pulse` class OR a custom\n * `@keyframes pulse` declaration both count for status-pulse.\n */\n signals: InteractionSignal[];\n /** Human-readable suggestion when signals don't match. */\n suggestion: string;\n}\n\n/**\n * Mapping from canonical interaction name (pattern.v2.json enum) to its\n * required signals. Add entries as new interactions are introduced.\n */\nexport const INTERACTION_SIGNALS: Record<string, InteractionRequirement> = {\n 'animate-on-mount': {\n interaction: 'animate-on-mount',\n signals: ['d-enter-fade', 'd-enter-slide-up', 'd-enter-scale', 'animate-on-mount'],\n suggestion: 'Add `d-enter-fade`, `d-enter-slide-up`, or `d-enter-scale` to the pattern root.',\n },\n 'stagger-children': {\n interaction: 'stagger-children',\n signals: ['d-stagger-children', '--d-stagger-index'],\n suggestion:\n 'Apply `d-stagger-children` to the parent and `style={{ \"--d-stagger-index\": i }}` to each child.',\n },\n 'status-pulse': {\n interaction: 'status-pulse',\n signals: ['d-pulse', 'd-pulse-ring', /@keyframes\\s+pulse/],\n suggestion: 'Apply `d-pulse` or `d-pulse-ring` to the status indicator element.',\n },\n 'shimmer-skeleton': {\n interaction: 'shimmer-skeleton',\n signals: ['d-shimmer', /@keyframes\\s+shimmer/],\n suggestion: 'Apply `d-shimmer` to the skeleton/loading element.',\n },\n 'float-idle': {\n interaction: 'float-idle',\n signals: ['d-float'],\n suggestion: 'Apply `d-float` to the floating decorative element.',\n },\n 'glow-hover': {\n interaction: 'glow-hover',\n signals: ['d-glow-hover'],\n suggestion: 'Apply `d-glow-hover` to the interactive surface.',\n },\n 'lift-hover': {\n interaction: 'lift-hover',\n signals: ['d-lift-hover'],\n suggestion: 'Apply `d-lift-hover` to the interactive card/tile.',\n },\n 'scale-hover': {\n interaction: 'scale-hover',\n signals: ['d-scale-hover'],\n suggestion: 'Apply `d-scale-hover` to the interactive element.',\n },\n 'ripple-click': {\n interaction: 'ripple-click',\n signals: ['d-ripple'],\n suggestion: 'Apply `d-ripple` to the button or interactive surface.',\n },\n 'drag-nodes': {\n interaction: 'drag-nodes',\n signals: [/onPointer(Down|Move|Up)/i, /onMouse(Down|Move|Up)/i, /'?cursor.*?grab/i],\n suggestion:\n 'Implement pointer event handlers (onPointerDown/Move/Up) with a 4px movement threshold before drag engages. Apply cursor: grab/grabbing.',\n },\n 'drag-reorder': {\n interaction: 'drag-reorder',\n signals: [/onPointer(Down|Move)/i, /draggable/i, /dnd|drag.{0,10}drop/i],\n suggestion: 'Implement drag-to-reorder via pointer events or a dnd library.',\n },\n 'pan-background': {\n interaction: 'pan-background',\n signals: [/onPointer(Down|Move)/i, /transform.*?translate/i, /viewBox/],\n suggestion:\n 'Implement pointer handlers on the canvas BACKGROUND only (not nodes); update a viewport translate transform on drag.',\n },\n 'zoom-scroll': {\n interaction: 'zoom-scroll',\n signals: [/onWheel/i, /transform.*?scale/i],\n suggestion:\n 'Implement an onWheel handler that adjusts a `scale` transform, clamped to [0.25, 4]. Show a zoom indicator.',\n },\n 'zoom-pinch': {\n interaction: 'zoom-pinch',\n signals: [/touchstart|touchmove|gesturechange/i, /pinch/i],\n suggestion: 'Implement pinch-to-zoom via touch events or gestureend.',\n },\n 'click-select': {\n interaction: 'click-select',\n signals: [/onClick/i, /selected/i, /aria-selected/i],\n suggestion:\n 'Implement click-to-select state via onClick handlers; reflect selection via aria-selected or a \"selected\" class.',\n },\n 'click-connect': {\n interaction: 'click-connect',\n signals: [/onClick.*?port|connect/i, /connections?\\s*[:[=]/i],\n suggestion:\n 'Implement a two-click state machine: first click selects a port, second click on another port creates a connection. Store connections in component state.',\n },\n 'inline-edit': {\n interaction: 'inline-edit',\n signals: [/contenteditable|input.*?onBlur|onKeyDown.*?Enter/i, 'isEditing'],\n suggestion:\n 'Replace static text with a controlled <input> on click; commit on blur or Enter keyDown.',\n },\n 'hover-tooltip': {\n interaction: 'hover-tooltip',\n signals: [/data-tooltip|onMouseEnter|tooltip/i, 'role=\"tooltip\"'],\n suggestion:\n 'Implement a hover-triggered tooltip: data-tooltip attribute or onMouseEnter/Leave handlers showing/hiding a popover.',\n },\n 'hover-reveal': {\n interaction: 'hover-reveal',\n signals: [/:hover/i, /onMouseEnter/i, /group-hover/i],\n suggestion: 'Implement hover-triggered content reveal via :hover CSS or onMouseEnter handlers.',\n },\n 'live-simulation': {\n interaction: 'live-simulation',\n signals: [/setInterval|setTimeout|requestAnimationFrame/i, /useEffect/i],\n suggestion:\n 'Implement live data simulation via setInterval (2-4 second cadence) updating mock state; animate changes with `d-pulse` on the changed element.',\n },\n 'real-time-updates': {\n interaction: 'real-time-updates',\n signals: [/setInterval|WebSocket|EventSource|subscribe/i],\n suggestion:\n 'Implement real-time updates via WebSocket, EventSource, or polling with setInterval.',\n },\n 'scroll-reveal': {\n interaction: 'scroll-reveal',\n signals: [/IntersectionObserver/i, /onScroll/i],\n suggestion: 'Implement scroll-triggered reveal via IntersectionObserver (once: true).',\n },\n 'keyboard-navigation': {\n interaction: 'keyboard-navigation',\n signals: [/onKeyDown|onKeyUp/i, /ArrowUp|ArrowDown|ArrowLeft|ArrowRight/],\n suggestion: 'Implement arrow-key navigation via onKeyDown handlers (ArrowUp/Down/Left/Right).',\n },\n 'focus-trap': {\n interaction: 'focus-trap',\n signals: [/focusTrap|tabindex|aria-modal/i, /useFocusTrap/],\n suggestion:\n 'Implement focus trap inside modal/dialog — listen for Tab key, cycle focus within the dialog, restore focus on close.',\n },\n};\n\nexport interface InteractionMissingFinding {\n interaction: string;\n suggestion: string;\n scannedFiles?: number;\n scannedLocations?: Array<{ file: string; startLine: number; endLine: number }>;\n expectedSignals?: string[];\n}\n\nfunction sourceLineCount(source: string): number {\n return Math.max(1, source.replace(/\\r?\\n$/, '').split(/\\r?\\n/).length);\n}\n\n/**\n * Scan a source-tree map (file path → file contents) for evidence of each\n * declared interaction. Returns a list of interactions whose signals were\n * not found anywhere in the source.\n *\n * @param interactions Declared interactions from one or more page packs.\n * Duplicates collapse to a single check.\n * @param sources Map of file path → file contents to scan.\n * @returns List of interactions that have no matching signal.\n */\nexport function verifyInteractionsInSource(\n interactions: string[],\n sources: Map<string, string>,\n): InteractionMissingFinding[] {\n if (interactions.length === 0 || sources.size === 0) return [];\n\n const unique = Array.from(new Set(interactions));\n const missing: InteractionMissingFinding[] = [];\n\n for (const interaction of unique) {\n const requirement = INTERACTION_SIGNALS[interaction];\n if (!requirement) {\n // Unknown interaction — skip silently. Forward-compatible with\n // future enum additions that this scanner doesn't yet recognize.\n continue;\n }\n\n let matched = false;\n for (const source of sources.values()) {\n matched = requirement.signals.some((signal) => {\n if (typeof signal === 'string') {\n return source.includes(signal);\n }\n signal.lastIndex = 0;\n return signal.test(source);\n });\n if (matched) break;\n }\n\n if (!matched) {\n missing.push({\n interaction,\n suggestion: requirement.suggestion,\n scannedFiles: sources.size,\n scannedLocations: [...sources.entries()].slice(0, 8).map(([file, source]) => ({\n file,\n startLine: 1,\n endLine: sourceLineCount(source),\n })),\n expectedSignals: requirement.signals.map((signal) =>\n typeof signal === 'string' ? signal : String(signal),\n ),\n });\n }\n }\n\n return missing;\n}\n\n/**\n * Convenience: list every recognized interaction name. Useful for\n * documentation, validation, and surfacing the canonical enum.\n */\nexport function listKnownInteractions(): string[] {\n return Object.keys(INTERACTION_SIGNALS).sort();\n}\n"],"mappings":"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;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,yBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,uCACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,+BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,kCACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,4BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAID,yBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAIC,6BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,+BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,2BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,iCACA,CAAC,yEAAyE,IAC1E,CAAC;AAAA,MACL,GAAI,6BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,iCACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,8BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,6BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,8BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,oCACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,kCACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,6BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,4BACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,uBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,yBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,sBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,wBACA;AAAA,QACE;AAAA,MACF,IACA,CAAC;A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","names":["existsSync","readdirSync","readFileSync","statSync","extname","join","existsSync","readFileSync","join","statSync","readdirSync","normalizeRouteHint","extname","valueContainsInsecureRemoteAsset","result","resolvedObjectLiteral","functionLike","hasInsecureFormAction","hasInsecureAuthFormMethod"]}
|