/** * One discovered route. `template` uses URLPattern `:param` syntax * (e.g. `/companies/:companySlug/jobs/:jobSlug`). Callers on other * runtimes instantiate matchers; this module only emits strings. */ type RouteEntry = { template: string; /** Absolute or project-relative source path — keys the marker map. */ sourcePath?: string; }; /** Versioned role → template map. Additive schema evolution only. */ type ManifestV1 = { version: 1; roles: Partial>; }; type Ambiguity = { role: RouteRole; candidates: RouteEntry[]; }; type ClassifyResult = { assignments: Partial>; ambiguities: Ambiguity[]; missingRequired: RouteRole[]; }; type CompileResult = { manifest: ManifestV1; blockingMissing: RouteRole[]; warnings: string[]; ambiguities: Ambiguity[]; }; type ValidateManifestError = { code: 'invalid_shape' | 'invalid_version' | 'unknown_role' | 'unregistered_param' | 'missing_entity_param' | 'static_has_params' | 'invalid_template' /** Protocol-relative or double-slash path (open redirect / SSRF shape). */ | 'template_double_slash' /** '.' or '..' path segments. */ | 'template_dot_segment' /** Query string or fragment in a path template. */ | 'template_query_or_fragment' /** Characters outside the allowed path/token charset. */ | 'template_illegal_charset'; message: string; role?: string; token?: string; }; type ValidateManifestResult = { ok: true; manifest: ManifestV1; } | { ok: false; errors: ValidateManifestError[]; }; /** * Role vocabulary for the per-board route manifest. * * Parameterized roles mirror the helpers in `../paths`; static roles mirror * `BOARD_PATHS` keys; `alertsManage` / `alertsConfirm` are promoted out of * raw literals in the job-alerts composer. * * Pure + isomorphic — imports only the sibling paths module. */ /** Every role the compiler can assign. */ type RouteRole = 'jobDetail' | 'jobsCategory' | 'jobsSkill' | 'jobsLocation' | 'company' | 'companyMarket' | 'companySalary' | 'salaryTitle' | 'salarySkill' | 'salaryLocation' | 'blogPost' | 'blogTag' | 'blogAuthor' | 'home' | 'jobs' | 'companies' | 'salaries' | 'salaryCompanies' | 'salaryTitles' | 'salarySkills' | 'salaryLocations' | 'blog' | 'about' | 'privacyPolicy' | 'termsOfService' | 'cookiePolicy' | 'impressum' | 'talent' | 'employers' | 'alertsManage' | 'alertsConfirm'; /** * Exact param-name set per role, derived from each helper's signature. * Empty arrays = static / zero-param roles (never inferred by signature). */ declare const ROLE_PARAM_REGISTRY: Record; /** Email-emitting roles — a missing one blocks publish. */ declare const REQUIRED_ROLES: readonly RouteRole[]; /** All known roles (stable iteration order = registry key order). */ declare const ALL_ROLES: readonly RouteRole[]; declare function isRouteRole(value: string): value is RouteRole; /** * Identity manifest reproducing the current canonical structure from the * paths module. Built by calling helpers with `:param` placeholders so the * templates stay locked to the helpers. */ declare const CANONICAL_MANIFEST: ManifestV1; export { ALL_ROLES as A, type ClassifyResult as C, type ManifestV1 as M, type RouteEntry as R, type ValidateManifestError as V, type RouteRole as a, type CompileResult as b, type ValidateManifestResult as c, type Ambiguity as d, CANONICAL_MANIFEST as e, REQUIRED_ROLES as f, ROLE_PARAM_REGISTRY as g, isRouteRole as i };