Add vitepress docs

This commit is contained in:
Ticruz
2025-02-04 14:43:40 +01:00
committed by Jon Staab
parent 43255bcb74
commit 94375a56ec
84 changed files with 10821 additions and 139 deletions
+101
View File
@@ -0,0 +1,101 @@
# Feed Compiler
The `FeedCompiler` class is responsible for transforming feed definitions into executable relay requests. It handles the complex task of converting various feed types into optimized filters and relay selections.
## Overview
```typescript
class FeedCompiler {
constructor(readonly options: FeedOptions)
canCompile(feed: Feed): boolean
compile(feed: Feed): Promise<RequestItem[]>
}
```
## Feed Compilation Process
The compiler transforms feed definitions into `RequestItem[]`, where each item contains:
```typescript
type RequestItem = {
relays?: string[] // Specific relays to query
filters?: Filter[] // Nostr filters to apply
}
```
## Examples
### Basic Feed Compilation
```typescript
const compiler = new FeedCompiler(options)
// Simple author feed
const feed = [FeedType.Author, "pubkey1", "pubkey2"]
const requests = await compiler.compile(feed)
// => [{ filters: [{ authors: ["pubkey1", "pubkey2"] }] }]
```
### Complex Feed Compilation
```typescript
// Complex feed with multiple operations
const feed = [
FeedType.Intersection,
[FeedType.Kind, 1],
[
FeedType.Union,
[FeedType.Scope, Scope.Follows],
[FeedType.List, { addresses: ["trending"] }]
]
]
const requests = await compiler.compile(feed)
// Compiles to optimized filters for relay queries
```
### DVM Integration
```typescript
const feed = [
FeedType.DVM,
{
kind: 5300,
mappings: [
["p", [FeedType.Author]],
["t", [FeedType.Tag, "#t"]]
]
}
]
const requests = await compiler.compile(feed)
// Queries DVM and compiles resulting tags into feeds
```
## Implementation Notes
### Optimization Strategies
1. **Filter Merging**: Similar filters are combined when possible
```typescript
// Before: [{ authors: ["a"] }, { authors: ["b"] }]
// After: [{ authors: ["a", "b"] }]
```
2. **Relay Grouping**: Requests are grouped by relay where possible
```typescript
// Filters are organized by relay to minimize connections
filtersByRelay: Map<string, Filter[]>
```
3. **Deduplication**: Duplicate values are removed using `uniq`
```typescript
uniq(scopes.flatMap(this.options.getPubkeysForScope))
```
### Error Handling
The compiler includes various safety checks:
```typescript
canCompile(feed: Feed): boolean {
// Checks if feed type is supported
// Recursively checks sub-feeds
}
```