Add getSubFeeds to feeds
This commit is contained in:
@@ -1,7 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
npm i
|
|
||||||
|
|
||||||
for upstream in $(ls packages); do
|
for upstream in $(ls packages); do
|
||||||
version=$(sed -nr 's/ +"version": "(.+)",/\1/p' packages/$upstream/package.json)
|
version=$(sed -nr 's/ +"version": "(.+)",/\1/p' packages/$upstream/package.json)
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-10
@@ -3061,7 +3061,7 @@
|
|||||||
},
|
},
|
||||||
"packages/feeds": {
|
"packages/feeds": {
|
||||||
"name": "@coracle.social/feeds",
|
"name": "@coracle.social/feeds",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@coracle.social/util": "0.0.8"
|
"@coracle.social/util": "0.0.8"
|
||||||
@@ -3098,7 +3098,7 @@
|
|||||||
},
|
},
|
||||||
"packages/network": {
|
"packages/network": {
|
||||||
"name": "@coracle.social/network",
|
"name": "@coracle.social/network",
|
||||||
"version": "0.0.7",
|
"version": "0.0.8",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@coracle.social/lib": "0.0.6",
|
"@coracle.social/lib": "0.0.6",
|
||||||
@@ -3113,14 +3113,6 @@
|
|||||||
"typescript": "~5.1.6"
|
"typescript": "~5.1.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"packages/network/node_modules/@scure/base": {
|
|
||||||
"version": "1.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz",
|
|
||||||
"integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://paulmillr.com/funding/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"packages/util": {
|
"packages/util": {
|
||||||
"name": "@coracle.social/util",
|
"name": "@coracle.social/util",
|
||||||
"version": "0.0.8",
|
"version": "0.0.8",
|
||||||
|
|||||||
@@ -2,31 +2,24 @@ import {uniq, now, isNil} from '@coracle.social/lib'
|
|||||||
import type {Rumor, Filter} from '@coracle.social/util'
|
import type {Rumor, Filter} from '@coracle.social/util'
|
||||||
import {Tags, getIdFilters, mergeFilters} from '@coracle.social/util'
|
import {Tags, getIdFilters, mergeFilters} from '@coracle.social/util'
|
||||||
import type {RequestItem, DVMItem, Scope, Feed, DynamicFilter, FeedOptions} from './core'
|
import type {RequestItem, DVMItem, Scope, Feed, DynamicFilter, FeedOptions} from './core'
|
||||||
import {FeedType} from './core'
|
import {FeedType, getSubFeeds} from './core'
|
||||||
|
|
||||||
export class FeedCompiler<E extends Rumor> {
|
export class FeedCompiler<E extends Rumor> {
|
||||||
constructor(readonly options: FeedOptions<E>) {}
|
constructor(readonly options: FeedOptions<E>) {}
|
||||||
|
|
||||||
walk([type, ...feed]: Feed, visit: (feed: Feed) => void) {
|
walk(feed: Feed, visit: (feed: Feed) => void) {
|
||||||
visit([type, ...feed] as Feed)
|
visit(feed)
|
||||||
|
|
||||||
switch(type) {
|
for (const subFeed of getSubFeeds(feed)) {
|
||||||
case FeedType.Difference:
|
this.walk(subFeed, visit)
|
||||||
case FeedType.Intersection:
|
|
||||||
case FeedType.SymmetricDifference:
|
|
||||||
case FeedType.Union:
|
|
||||||
for (const subFeed of feed) {
|
|
||||||
this.walk(subFeed as Feed, visit)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
canCompile([type, ...feed]: Feed): boolean {
|
canCompile([type, ...feed]: Feed): boolean {
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case FeedType.Relay:
|
case FeedType.Relay:
|
||||||
return (feed.slice(1) as Feed[]).every(this.canCompile)
|
|
||||||
case FeedType.Union:
|
case FeedType.Union:
|
||||||
return (feed as Feed[]).every(this.canCompile)
|
return getSubFeeds([type, ...feed] as Feed).every(this.canCompile)
|
||||||
case FeedType.Filter:
|
case FeedType.Filter:
|
||||||
case FeedType.List:
|
case FeedType.List:
|
||||||
case FeedType.LOL:
|
case FeedType.LOL:
|
||||||
|
|||||||
+18
-3
@@ -13,10 +13,11 @@ export enum FeedType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum Scope {
|
export enum Scope {
|
||||||
Self = "self",
|
|
||||||
Global = "global",
|
|
||||||
Follows = "follows",
|
|
||||||
Followers = "followers",
|
Followers = "followers",
|
||||||
|
Follows = "follows",
|
||||||
|
Global = "global",
|
||||||
|
Network = "network",
|
||||||
|
Self = "self",
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DynamicFilter = Filter & {
|
export type DynamicFilter = Filter & {
|
||||||
@@ -59,6 +60,20 @@ export const listFeed = (...addresses: string[]) => [FeedType.List, ...addresses
|
|||||||
export const lolFeed = (...addresses: string[]) => [FeedType.LOL, ...addresses] as Feed
|
export const lolFeed = (...addresses: string[]) => [FeedType.LOL, ...addresses] as Feed
|
||||||
export const dvmFeed = (...requests: DVMItem[]) => [FeedType.DVM, ...requests] as Feed
|
export const dvmFeed = (...requests: DVMItem[]) => [FeedType.DVM, ...requests] as Feed
|
||||||
|
|
||||||
|
export const getSubFeeds = ([type, ...feed]: Feed): Feed[] => {
|
||||||
|
switch (type) {
|
||||||
|
case FeedType.Relay:
|
||||||
|
return feed.slice(1) as Feed[]
|
||||||
|
case FeedType.Difference:
|
||||||
|
case FeedType.Intersection:
|
||||||
|
case FeedType.SymmetricDifference:
|
||||||
|
case FeedType.Union:
|
||||||
|
return feed as Feed[]
|
||||||
|
default:
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export type RequestItem = {
|
export type RequestItem = {
|
||||||
relays: string[]
|
relays: string[]
|
||||||
filters: Filter[]
|
filters: Filter[]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@coracle.social/feeds",
|
"name": "@coracle.social/feeds",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"author": "hodlbod",
|
"author": "hodlbod",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Utilities for building dynamic nostr feeds.",
|
"description": "Utilities for building dynamic nostr feeds.",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@coracle.social/network",
|
"name": "@coracle.social/network",
|
||||||
"version": "0.0.7",
|
"version": "0.0.8",
|
||||||
"author": "hodlbod",
|
"author": "hodlbod",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"description": "Utilities for connecting with nostr relays.",
|
"description": "Utilities for connecting with nostr relays.",
|
||||||
|
|||||||
Reference in New Issue
Block a user