/** * Turn a market provider page into the panel's own model. * * The catalog is remote and untrusted — that is the contract's own wording, * and it holds even when we publish the catalog ourselves, because a user may * point this plugin at any endpoint. So nothing here trusts a field's * presence or type: every entry is checked, and an entry that fails is * dropped rather than rendered half-empty. * @module dsh-research/catalog */ import type { CatalogPage } from './shared/route.js'; /** Derive `owner/repo` from a GitHub URL, or `undefined` for anything else. */ export declare function repoFromUrl(url: string): string | undefined; /** * Normalize a provider page. * @param raw - the parsed JSON body. * @returns the entries the panel can render, in catalog order. * @throws Error when the body is not a provider page at all. */ export declare function normalizeCatalog(raw: unknown): CatalogPage;