Build the default strategy registry containing all built-in strategies.
Each concrete strategy implements ArticleStrategy<ConcreteData> where
ConcreteData extends ArticleData. TypeScript's invariant generic
parameter means the concrete type is not directly assignable to the base
ArticleStrategy<ArticleData> without a boundary cast; the
as unknown as ArticleStrategy<ArticleData> casts below are therefore
intentional and safe — the registry delegates back to each strategy's own
typed fetchData/buildContent/getMetadata methods at call-site.
Build the default strategy registry containing all built-in strategies.
Each concrete strategy implements
ArticleStrategy<ConcreteData>whereConcreteDataextendsArticleData. TypeScript's invariant generic parameter means the concrete type is not directly assignable to the baseArticleStrategy<ArticleData>without a boundary cast; theas unknown as ArticleStrategy<ArticleData>casts below are therefore intentional and safe — the registry delegates back to each strategy's own typedfetchData/buildContent/getMetadatamethods at call-site.