@mintlify/scraping
Version:
Scrape documentation frameworks to Mintlify docs
46 lines • 1.75 kB
JavaScript
const KIND_DIRS = {
class: 'classes',
interface: 'interfaces',
enum: 'enums',
function: 'functions',
type: 'types',
variable: 'variables',
method: 'methods',
property: 'properties',
};
export function matchesSdkPageTarget(pageTarget, target) {
if (!pageTarget)
return false;
if (pageTarget.kind !== target.kind || pageTarget.name !== target.name)
return false;
if (target.parent)
return pageTarget.parent === target.parent;
return pageTarget.parent === undefined;
}
function matchesSdkPageHeuristic(page, target) {
if (target.parent) {
return (page.title === `${target.parent}.${target.name}` ||
page.slug.endsWith(`/${slugify(target.parent)}/${slugify(target.name)}`));
}
// Only slug matches encode the symbol kind; a bare title match could return
// a same-named symbol of a different kind.
const dir = KIND_DIRS[target.kind];
return (page.slug === `${dir}/${slugify(target.name)}` ||
page.slug.endsWith(`/${dir}/${slugify(target.name)}`));
}
function slugify(name) {
return name.replace(/[^a-zA-Z0-9-_.]+/g, '-').replace(/^-+|-+$/g, '') || 'item';
}
export function findSdkPage(reference, target) {
return (reference.pages.find((page) => matchesSdkPageTarget(page.target, target)) ??
reference.pages.find((page) => matchesSdkPageHeuristic(page, target)));
}
export function renderSdkTarget(reference, target) {
const page = findSdkPage(reference, target);
if (!page) {
const qualified = target.parent ? `${target.parent}.${target.name}` : target.name;
throw new Error(`SDK symbol not found: ${target.kind} ${qualified}`);
}
return page;
}
//# sourceMappingURL=findSdkPage.js.map