Adapters (pure functions + tests): - detail-description: strip HTML/BBCode residue, drop site template blocks and ad/signature lines (configurable rules), parse PT info blocks (◎ / 【】 / 『』 / 「键:」) into infoBlock and body paragraphs - mediainfo: MediaInfo and BDInfo (quick summary + full report) into a summary of container/duration/bitrate/size, video (HDR/DV), audio and subtitle tracks - file-tree: file list into a flattened directory tree with sizes and main/sample/subtitle/extra roles - formatDetailPage combines them; the server computes it when reading the cached detail page, so existing caches benefit without a refetch Contracts: SiteReleasePage gains infoBlock, paragraphs, media, fileTree. Web: drawer now reads top-down: meta row (promo/H&R, size, peers, upload time, IMDb/TMDB/豆瓣 tags) → 资料 → 简介 (collapsible) → 技术规格 (raw folded) → 截图 grid with keyboard lightbox → 文件 tree; inventory overlay moved into the fixed footer next to 下载. Fixtures: 6 desensitized samples from the local cache (site.detail and RSS descriptions) plus synthetic multi-track MediaInfo, BDInfo, bracket blocks and directory file lists. Co-Authored-By: Claude Opus 5.5 <[email protected]>
134 lines
3.4 KiB
TypeScript
134 lines
3.4 KiB
TypeScript
export {
|
|
audiencesDefinition,
|
|
BUILTIN_SITE_DEFINITIONS,
|
|
chdbitsDefinition,
|
|
DefinitionProvenanceSchema,
|
|
hhanclubDefinition,
|
|
IndexerDefinitionSchema,
|
|
loadIndexerDefinition,
|
|
loadSiteDefinition,
|
|
MteamDefinitionSchema,
|
|
parseIndexerDefinition,
|
|
parseMteamDefinition,
|
|
parseSpecializedSiteDefinition,
|
|
SpecializedSiteDefinitionSchema,
|
|
SpiderFieldSelectorSchema,
|
|
SpiderFilterSchema,
|
|
} from "./definitions/index.ts";
|
|
export type { SiteAdapterDeps } from "./deps.ts";
|
|
export {
|
|
cleanDescription,
|
|
DEFAULT_DESCRIPTION_RULES,
|
|
type DescriptionRules,
|
|
type DetailInfoItem,
|
|
type StructuredDescription,
|
|
stripMarkup,
|
|
structureDescription,
|
|
} from "./detail-description.ts";
|
|
export { type FormattedDetailPage, formatDetailPage } from "./detail-format.ts";
|
|
export {
|
|
type FeedMediaType,
|
|
normalizeSiteFeedItem,
|
|
type SiteFeedItemFields,
|
|
siteCategoryMediaType,
|
|
} from "./feed-item.ts";
|
|
export { buildFileTree, type FileRole, type FileTreeRow } from "./file-tree.ts";
|
|
export {
|
|
classifyLoginError,
|
|
loginFailureText,
|
|
loginNexusPhp,
|
|
type NexusLoginForm,
|
|
type NexusLoginInput,
|
|
type NexusLoginResult,
|
|
SiteLoginError,
|
|
type SiteLoginFailure,
|
|
totpCode,
|
|
} from "./login/nexusphp.ts";
|
|
export {
|
|
type MediaAudioTrack,
|
|
type MediaGeneral,
|
|
type MediaSummary,
|
|
type MediaTextTrack,
|
|
type MediaVideoTrack,
|
|
parseMediaSummary,
|
|
} from "./mediainfo.ts";
|
|
export { createMteamAdapter, mteamTorrentToRelease } from "./mteam/adapter.ts";
|
|
export { type MteamApiPath, mteamPost } from "./mteam/client.ts";
|
|
export { type MteamDefinition, mteamApiBase, mteamDefinition } from "./mteam/definition.ts";
|
|
export {
|
|
findImdbid,
|
|
getDownloadVolumeFactor,
|
|
getUploadVolumeFactor,
|
|
type MteamTorrentJson,
|
|
mteamSearchParams,
|
|
parseMteamResult,
|
|
} from "./mteam/spider.ts";
|
|
export {
|
|
createSharedSiteRateLimiter,
|
|
createSiteRateLimiter,
|
|
type RateLimiterOptions,
|
|
type SharedBucketPort,
|
|
type SharedRateLimiterOptions,
|
|
type SiteRateLimiter,
|
|
} from "./rate-limit.ts";
|
|
export {
|
|
createSiteAdapter,
|
|
getSiteAdapter,
|
|
getSiteDefinition,
|
|
listSiteDefinitions,
|
|
SITE_DEFINITIONS,
|
|
type SiteDefinition,
|
|
} from "./registry.ts";
|
|
export { clearSearchText, createSpiderSiteAdapter } from "./spider/adapter.ts";
|
|
export { parseDetailPage } from "./spider/detail.ts";
|
|
export { promotionFromFactors, spiderTorrentToRelease } from "./spider/map.ts";
|
|
export { mcSelect } from "./spider/mc-selector.ts";
|
|
export type {
|
|
DefinitionProvenance,
|
|
IndexerDefinition,
|
|
SpiderCategoryConfig,
|
|
SpiderCategoryItem,
|
|
SpiderFieldSelector,
|
|
SpiderFields,
|
|
SpiderFilter,
|
|
UmtSiteExtension,
|
|
} from "./spider/schema.ts";
|
|
export {
|
|
combineUrl,
|
|
type MediaKind,
|
|
type MpMediaType,
|
|
parseSizeMp,
|
|
resolveCategoryMediaType,
|
|
SiteSpider,
|
|
type SiteSpiderQuery,
|
|
type SpiderTorrent,
|
|
selectMediaCategories,
|
|
} from "./spider/spider.ts";
|
|
export * from "./spiders/index.ts";
|
|
export {
|
|
type DownloadTarget,
|
|
type HitAndRun,
|
|
type PromotionType,
|
|
type SecretResolver,
|
|
type SiteAdapter,
|
|
type SiteCallOptions,
|
|
type SiteCapabilities,
|
|
type SiteCategory,
|
|
type SiteCredentialKind,
|
|
type SiteDetailFile,
|
|
type SiteDetailPage,
|
|
SiteError,
|
|
type SiteErrorKind,
|
|
type SiteHealth,
|
|
type SiteHealthStatus,
|
|
type SiteKind,
|
|
type SiteListFilters,
|
|
type SitePage,
|
|
type SitePromotion,
|
|
type SiteRelease,
|
|
type SiteReleaseDetail,
|
|
staticSecretResolver,
|
|
} from "./types.ts";
|
|
export * from "./user-parsers/index.ts";
|
|
export { parseCount, parseSiteTime } from "./util.ts";
|