This documentation is also published as Markdown for efficient machine reading: the whole site is indexed at /llms.txt, and every page has a clean Markdown copy at the same URL with .md appended. These are generated from the same source and cost far fewer tokens to read than this rendered HTML.

Skip to main content Skip to navigation

SearchArtifactContentService Pennington.Search

Artifact-tier façade over SearchArtifactService: claims the sharded index territory under /search/, serves shards in dev through the artifact router, and enumerates the same files for the static build — one byte path for both surfaces. Transient so each resolution captures the current file-watched service.

Properties

Claims ImmutableList<ArtifactClaim>
URL territories this service serves. Options-derived and consulted on every request — must be cheap and must not trigger discovery, the projection, or any lazy corpus work.

Constructors

SearchArtifactContentService

#
public SearchArtifactContentService(SearchArtifactService service)

Creates the façade over the given SearchArtifactService.

Parameters

service SearchArtifactService

Methods

DiscoverAsync

#
public IAsyncEnumerable<DiscoveredItem> DiscoverAsync()

Enumerates every artifact route the static build should write, as GeneratedSource items. May consume the projection — the build invokes this outside any request, after the page crawl has primed the render cache. Never called on the request path.

Returns

IAsyncEnumerable<DiscoveredItem>

ResolveAsync

#
public Task<ArtifactContent> ResolveAsync(string relativePath, CancellationToken cancellationToken)

Returns the bytes for relativePath (no leading slash, e.g. search/en/index.json), or null to decline so the request falls through to content routing. May materialize the projection, build an index, or run Chromium on demand.

Parameters

relativePath string
cancellationToken CancellationToken

Returns

Task<ArtifactContent>

Pennington.Search.SearchArtifactContentService

namespace Pennington.Search;

/// Artifact-tier façade over SearchArtifactService: claims the sharded index territory under /search/, serves shards in dev through the artifact router, and enumerates the same files for the static build — one byte path for both surfaces. Transient so each resolution captures the current file-watched service.
public class SearchArtifactContentService
{
    /// URL territories this service serves. Options-derived and consulted on every request — must be cheap and must not trigger discovery, the projection, or any lazy corpus work.
    
public ImmutableList<ArtifactClaim> Claims { get; }
/// Enumerates every artifact route the static build should write, as GeneratedSource items. May consume the projection — the build invokes this outside any request, after the page crawl has primed the render cache. Never called on the request path.
public IAsyncEnumerable<DiscoveredItem> DiscoverAsync()
; /// Returns the bytes for relativePath (no leading slash, e.g. search/en/index.json), or null to decline so the request falls through to content routing. May materialize the projection, build an index, or run Chromium on demand.
public Task<ArtifactContent> ResolveAsync(string relativePath, CancellationToken cancellationToken)
; /// Creates the façade over the given SearchArtifactService.
public SearchArtifactContentService(SearchArtifactService service)
; }