feedscout 1.8.1 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +1 -1
  2. package/dist/common/discover/utils.d.ts +2 -3
  3. package/dist/common/locales.js +214 -10
  4. package/dist/common/types.d.ts +2 -1
  5. package/dist/common/uris/feed/types.d.ts +2 -2
  6. package/dist/common/uris/html/types.d.ts +4 -4
  7. package/dist/common/utils.d.ts +6 -4
  8. package/dist/common/utils.js +12 -3
  9. package/dist/feeds/defaults.d.ts +2 -1
  10. package/dist/feeds/defaults.js +116 -9
  11. package/dist/feeds/extractors.js +2 -2
  12. package/dist/feeds/platform/handlers/acast.js +26 -0
  13. package/dist/feeds/platform/handlers/ameblo.js +36 -0
  14. package/dist/feeds/platform/handlers/applePodcasts.js +1 -1
  15. package/dist/feeds/platform/handlers/arena.js +42 -0
  16. package/dist/feeds/platform/handlers/artstation.js +52 -0
  17. package/dist/feeds/platform/handlers/audioboom.js +23 -0
  18. package/dist/feeds/platform/handlers/bearblog.js +45 -0
  19. package/dist/feeds/platform/handlers/behance.js +7 -0
  20. package/dist/feeds/platform/handlers/blogspot.js +38 -2
  21. package/dist/feeds/platform/handlers/bookwyrm.js +48 -0
  22. package/dist/feeds/platform/handlers/buttondown.js +43 -0
  23. package/dist/feeds/platform/handlers/buzzsprout.js +22 -0
  24. package/dist/feeds/platform/handlers/codeberg.js +5 -5
  25. package/dist/feeds/platform/handlers/dailymotion.js +16 -0
  26. package/dist/feeds/platform/handlers/deviantart.js +25 -6
  27. package/dist/feeds/platform/handlers/devto.js +8 -0
  28. package/dist/feeds/platform/handlers/discourse.js +70 -0
  29. package/dist/feeds/platform/handlers/dreamwidth.js +48 -0
  30. package/dist/feeds/platform/handlers/exblog.js +35 -0
  31. package/dist/feeds/platform/handlers/fireside.js +24 -0
  32. package/dist/feeds/platform/handlers/friendica.js +44 -0
  33. package/dist/feeds/platform/handlers/ghost.js +30 -0
  34. package/dist/feeds/platform/handlers/github.js +6 -0
  35. package/dist/feeds/platform/handlers/githubGist.js +16 -5
  36. package/dist/feeds/platform/handlers/gitlab.js +31 -13
  37. package/dist/feeds/platform/handlers/goodreads.js +18 -8
  38. package/dist/feeds/platform/handlers/hackernews.js +21 -0
  39. package/dist/feeds/platform/handlers/hashnode.js +1 -1
  40. package/dist/feeds/platform/handlers/hatenablog.js +4 -1
  41. package/dist/feeds/platform/handlers/hearthis.js +32 -0
  42. package/dist/feeds/platform/handlers/heyWorld.js +18 -0
  43. package/dist/feeds/platform/handlers/insanejournal.js +69 -0
  44. package/dist/feeds/platform/handlers/itchio.js +24 -1
  45. package/dist/feeds/platform/handlers/lemmy.js +46 -4
  46. package/dist/feeds/platform/handlers/letterboxd.js +4 -0
  47. package/dist/feeds/platform/handlers/libsyn.js +25 -0
  48. package/dist/feeds/platform/handlers/listed.js +20 -0
  49. package/dist/feeds/platform/handlers/livejournal.js +68 -0
  50. package/dist/feeds/platform/handlers/mastodon.js +32 -0
  51. package/dist/feeds/platform/handlers/mataroa.js +16 -0
  52. package/dist/feeds/platform/handlers/medium.js +2 -2
  53. package/dist/feeds/platform/handlers/microblog.js +55 -0
  54. package/dist/feeds/platform/handlers/misskey.js +40 -0
  55. package/dist/feeds/platform/handlers/myanimelist.js +43 -0
  56. package/dist/feeds/platform/handlers/naverBlog.js +21 -0
  57. package/dist/feeds/platform/handlers/nebula.js +68 -0
  58. package/dist/feeds/platform/handlers/note.js +53 -0
  59. package/dist/feeds/platform/handlers/observable.js +34 -0
  60. package/dist/feeds/platform/handlers/odysee.js +20 -0
  61. package/dist/feeds/platform/handlers/pagecord.js +16 -0
  62. package/dist/feeds/platform/handlers/paragraph.js +1 -2
  63. package/dist/feeds/platform/handlers/pika.js +35 -0
  64. package/dist/feeds/platform/handlers/pinterest.js +13 -0
  65. package/dist/feeds/platform/handlers/pixelfed.js +46 -0
  66. package/dist/feeds/platform/handlers/pleroma.js +34 -0
  67. package/dist/feeds/platform/handlers/podbean.js +29 -0
  68. package/dist/feeds/platform/handlers/podigee.js +29 -0
  69. package/dist/feeds/platform/handlers/posthaven.js +24 -0
  70. package/dist/feeds/platform/handlers/prose.js +26 -0
  71. package/dist/feeds/platform/handlers/qiita.js +58 -0
  72. package/dist/feeds/platform/handlers/reddit.js +83 -9
  73. package/dist/feeds/platform/handlers/rssCom.js +20 -0
  74. package/dist/feeds/platform/handlers/seesaa.js +22 -0
  75. package/dist/feeds/platform/handlers/sourceforge.js +37 -4
  76. package/dist/feeds/platform/handlers/spreaker.js +21 -0
  77. package/dist/feeds/platform/handlers/stackExchange.js +26 -2
  78. package/dist/feeds/platform/handlers/steam.js +7 -0
  79. package/dist/feeds/platform/handlers/tildes.js +41 -0
  80. package/dist/feeds/platform/handlers/tistory.js +16 -0
  81. package/dist/feeds/platform/handlers/transistor.js +29 -0
  82. package/dist/feeds/platform/handlers/velog.js +24 -0
  83. package/dist/feeds/platform/handlers/vimeo.js +6 -0
  84. package/dist/feeds/platform/handlers/weblogLol.js +26 -0
  85. package/dist/feeds/platform/handlers/weebly.js +25 -0
  86. package/dist/feeds/platform/handlers/wordpress.js +173 -28
  87. package/dist/feeds/platform/handlers/writeas.js +51 -0
  88. package/dist/feeds/platform/handlers/ximalaya.js +1 -1
  89. package/dist/feeds/platform/handlers/youtube.js +4 -1
  90. package/dist/feeds/platform/handlers/zenn.js +54 -0
  91. package/dist/feeds.d.ts +2 -2
  92. package/dist/feeds.js +2 -2
  93. package/dist/utils.d.ts +2 -1
  94. package/package.json +24 -64
  95. package/dist/blogrolls/defaults.cjs +0 -51
  96. package/dist/blogrolls/defaults.d.cts +0 -17
  97. package/dist/blogrolls/extractors.cjs +0 -21
  98. package/dist/blogrolls/extractors.d.cts +0 -7
  99. package/dist/blogrolls/index.cjs +0 -25
  100. package/dist/blogrolls/index.d.cts +0 -7
  101. package/dist/blogrolls/types.d.cts +0 -6
  102. package/dist/blogrolls.cjs +0 -13
  103. package/dist/blogrolls.d.cts +0 -4
  104. package/dist/common/discover/defaults.cjs +0 -46
  105. package/dist/common/discover/defaults.d.cts +0 -6
  106. package/dist/common/discover/index.cjs +0 -105
  107. package/dist/common/discover/utils.cjs +0 -101
  108. package/dist/common/discover/utils.d.cts +0 -6
  109. package/dist/common/locales.cjs +0 -144
  110. package/dist/common/types.cjs +0 -10
  111. package/dist/common/types.d.cts +0 -89
  112. package/dist/common/uris/feed/index.cjs +0 -12
  113. package/dist/common/uris/feed/index.d.cts +0 -6
  114. package/dist/common/uris/feed/types.d.cts +0 -9
  115. package/dist/common/uris/guess/index.cjs +0 -8
  116. package/dist/common/uris/guess/index.d.cts +0 -7
  117. package/dist/common/uris/guess/types.d.cts +0 -10
  118. package/dist/common/uris/guess/utils.cjs +0 -42
  119. package/dist/common/uris/guess/utils.d.cts +0 -8
  120. package/dist/common/uris/headers/index.cjs +0 -26
  121. package/dist/common/uris/headers/index.d.cts +0 -6
  122. package/dist/common/uris/headers/types.d.cts +0 -9
  123. package/dist/common/uris/html/handlers.cjs +0 -45
  124. package/dist/common/uris/html/index.cjs +0 -19
  125. package/dist/common/uris/html/index.d.cts +0 -6
  126. package/dist/common/uris/html/types.d.cts +0 -12
  127. package/dist/common/uris/index.cjs +0 -32
  128. package/dist/common/uris/platform/index.cjs +0 -10
  129. package/dist/common/uris/platform/index.d.cts +0 -7
  130. package/dist/common/uris/platform/types.d.cts +0 -13
  131. package/dist/common/utils.cjs +0 -89
  132. package/dist/common/utils.d.cts +0 -10
  133. package/dist/favicons/defaults.cjs +0 -65
  134. package/dist/favicons/defaults.d.cts +0 -18
  135. package/dist/favicons/extractors.cjs +0 -25
  136. package/dist/favicons/extractors.d.cts +0 -7
  137. package/dist/favicons/index.cjs +0 -29
  138. package/dist/favicons/index.d.cts +0 -7
  139. package/dist/favicons/platform/handlers/bluesky.cjs +0 -27
  140. package/dist/favicons/platform/handlers/codeberg.cjs +0 -19
  141. package/dist/favicons/platform/handlers/deviantart.cjs +0 -29
  142. package/dist/favicons/platform/handlers/devto.cjs +0 -31
  143. package/dist/favicons/platform/handlers/github.cjs +0 -19
  144. package/dist/favicons/platform/handlers/githubGist.cjs +0 -19
  145. package/dist/favicons/platform/handlers/gitlab.cjs +0 -38
  146. package/dist/favicons/platform/handlers/lobsters.cjs +0 -21
  147. package/dist/favicons/platform/handlers/mastodon.cjs +0 -40
  148. package/dist/favicons/platform/handlers/reddit.cjs +0 -42
  149. package/dist/favicons/platform/handlers/sourceforge.cjs +0 -21
  150. package/dist/favicons/platform/handlers/tumblr.cjs +0 -16
  151. package/dist/favicons/types.d.cts +0 -4
  152. package/dist/favicons/utils.cjs +0 -10
  153. package/dist/favicons.cjs +0 -12
  154. package/dist/favicons.d.cts +0 -4
  155. package/dist/feeds/defaults.cjs +0 -178
  156. package/dist/feeds/defaults.d.cts +0 -20
  157. package/dist/feeds/extractors.cjs +0 -46
  158. package/dist/feeds/extractors.d.cts +0 -7
  159. package/dist/feeds/index.cjs +0 -26
  160. package/dist/feeds/index.d.cts +0 -7
  161. package/dist/feeds/platform/handlers/applePodcasts.cjs +0 -26
  162. package/dist/feeds/platform/handlers/behance.cjs +0 -49
  163. package/dist/feeds/platform/handlers/blogspot.cjs +0 -36
  164. package/dist/feeds/platform/handlers/bluesky.cjs +0 -20
  165. package/dist/feeds/platform/handlers/codeberg.cjs +0 -69
  166. package/dist/feeds/platform/handlers/csdn.cjs +0 -20
  167. package/dist/feeds/platform/handlers/dailymotion.cjs +0 -70
  168. package/dist/feeds/platform/handlers/deviantart.cjs +0 -66
  169. package/dist/feeds/platform/handlers/devto.cjs +0 -50
  170. package/dist/feeds/platform/handlers/douban.cjs +0 -56
  171. package/dist/feeds/platform/handlers/github.cjs +0 -116
  172. package/dist/feeds/platform/handlers/githubGist.cjs +0 -45
  173. package/dist/feeds/platform/handlers/gitlab.cjs +0 -80
  174. package/dist/feeds/platform/handlers/goodreads.cjs +0 -39
  175. package/dist/feeds/platform/handlers/hashnode.cjs +0 -16
  176. package/dist/feeds/platform/handlers/hatenablog.cjs +0 -53
  177. package/dist/feeds/platform/handlers/itchio.cjs +0 -88
  178. package/dist/feeds/platform/handlers/kickstarter.cjs +0 -22
  179. package/dist/feeds/platform/handlers/lemmy.cjs +0 -46
  180. package/dist/feeds/platform/handlers/letterboxd.cjs +0 -42
  181. package/dist/feeds/platform/handlers/lobsters.cjs +0 -57
  182. package/dist/feeds/platform/handlers/mastodon.cjs +0 -42
  183. package/dist/feeds/platform/handlers/medium.cjs +0 -68
  184. package/dist/feeds/platform/handlers/paragraph.cjs +0 -21
  185. package/dist/feeds/platform/handlers/pinterest.cjs +0 -44
  186. package/dist/feeds/platform/handlers/producthunt.cjs +0 -29
  187. package/dist/feeds/platform/handlers/reddit.cjs +0 -75
  188. package/dist/feeds/platform/handlers/soundcloud.cjs +0 -39
  189. package/dist/feeds/platform/handlers/sourceforge.cjs +0 -20
  190. package/dist/feeds/platform/handlers/stackExchange.cjs +0 -40
  191. package/dist/feeds/platform/handlers/steam.cjs +0 -28
  192. package/dist/feeds/platform/handlers/substack.cjs +0 -23
  193. package/dist/feeds/platform/handlers/tumblr.cjs +0 -24
  194. package/dist/feeds/platform/handlers/v2ex.cjs +0 -35
  195. package/dist/feeds/platform/handlers/vimeo.cjs +0 -69
  196. package/dist/feeds/platform/handlers/wordpress.cjs +0 -64
  197. package/dist/feeds/platform/handlers/wpengine.cjs +0 -10
  198. package/dist/feeds/platform/handlers/ximalaya.cjs +0 -20
  199. package/dist/feeds/platform/handlers/youtube.cjs +0 -94
  200. package/dist/feeds/types.d.cts +0 -9
  201. package/dist/feeds.cjs +0 -15
  202. package/dist/feeds.d.cts +0 -4
  203. package/dist/hubs/discover/index.cjs +0 -30
  204. package/dist/hubs/discover/index.d.cts +0 -7
  205. package/dist/hubs/discover/types.d.cts +0 -15
  206. package/dist/hubs/feed/index.cjs +0 -32
  207. package/dist/hubs/headers/index.cjs +0 -17
  208. package/dist/hubs/html/index.cjs +0 -28
  209. package/dist/hubs.cjs +0 -0
  210. package/dist/hubs.d.cts +0 -2
  211. package/dist/index.cjs +0 -13
  212. package/dist/index.d.cts +0 -8
  213. package/dist/methods.cjs +0 -15
  214. package/dist/methods.d.cts +0 -7
  215. package/dist/utils.cjs +0 -9
  216. package/dist/utils.d.cts +0 -2
package/README.md CHANGED
@@ -23,7 +23,7 @@ Finds feeds by scanning links and anchors in HTML content, parsing HTTP headers,
23
23
  | Feeds | RSS, Atom, JSON Feed, and RDF. Each feed is validated and returns metadata like format, title, description, and site URL. |
24
24
  | Blogrolls | OPML files containing feed subscriptions. Validated and returns title. |
25
25
  | Favicons | Site icons from HTML, feeds, platform APIs, and common paths. Validated to ensure URLs point to actual images. |
26
- | WebSub hubs | Find hubs for real-time feed update notifications. |
26
+ | WebSub | Find hubs for real-time feed update notifications. |
27
27
 
28
28
  ### Discovery Methods
29
29
 
@@ -1,6 +1,5 @@
1
- import { parseFeed } from "feedsmith";
2
-
1
+ import { FeedMethodData } from "../uris/feed/types.js";
3
2
  //#region src/common/discover/utils.d.ts
4
- declare const getFeedSiteUrl: (parsed: ReturnType<typeof parseFeed>) => string | undefined;
3
+ declare const getFeedSiteUrl: (parsed: FeedMethodData) => string | undefined;
5
4
  //#endregion
6
5
  export { getFeedSiteUrl };
@@ -24,50 +24,89 @@ var hints = {
24
24
  "github:tags": "Tags",
25
25
  "github:wiki": "Wiki",
26
26
  "github:discussions": "Discussions",
27
+ "github:discussion-category": "Discussion category",
27
28
  "github:branch-commits": "Branch commits",
28
29
  "github:file-history": "File history",
29
30
  "reddit:posts": "Posts",
30
31
  "reddit:post-comments": "Post comments",
31
32
  "reddit:comments": "Comments",
32
33
  "reddit:multireddit": "Multireddit",
34
+ "reddit:user-submitted": "Submitted",
35
+ "reddit:user-comments": "Comments",
36
+ "reddit:search": "Search",
37
+ "reddit:wiki": "Wiki",
38
+ "reddit:subreddits": "Subreddits",
33
39
  "gitlab:activity": "Activity",
34
40
  "gitlab:releases": "Releases",
35
41
  "gitlab:tags": "Tags",
42
+ "gitlab:issues": "Issues",
43
+ "gitlab:merge-requests": "Merge requests",
44
+ "gitlab:branch-commits": "Branch commits",
36
45
  "codeberg:activity": "Activity",
37
46
  "codeberg:releases": "Releases",
38
47
  "codeberg:tags": "Tags",
39
48
  "codeberg:branch-commits": "Branch commits",
40
49
  "codeberg:file-history": "File history",
41
- "wordpress:category": "Category",
42
- "wordpress:tag": "Tag",
43
- "wordpress:author": "Author",
44
- "wordpress:posts-rss2": "Posts (RSS 2.0)",
45
- "wordpress:posts-rss2-alt": "Posts (RSS 2.0)",
50
+ "wordpress:category-rss": "Category (RSS)",
51
+ "wordpress:category-atom": "Category (Atom)",
52
+ "wordpress:category-rdf": "Category (RDF)",
53
+ "wordpress:tag-rss": "Tag (RSS)",
54
+ "wordpress:tag-atom": "Tag (Atom)",
55
+ "wordpress:tag-rdf": "Tag (RDF)",
56
+ "wordpress:author-rss": "Author (RSS)",
57
+ "wordpress:author-atom": "Author (Atom)",
58
+ "wordpress:author-rdf": "Author (RDF)",
59
+ "wordpress:date-archive-rss": "Date archive (RSS)",
60
+ "wordpress:date-archive-atom": "Date archive (Atom)",
61
+ "wordpress:date-archive-rdf": "Date archive (RDF)",
62
+ "wordpress:posts-rss": "Posts (RSS)",
46
63
  "wordpress:posts-rdf": "Posts (RDF)",
47
64
  "wordpress:posts-atom": "Posts (Atom)",
48
- "wordpress:comments": "Comments",
49
- "wordpress:comments-rss2": "Comments (RSS 2.0)",
65
+ "wordpress:comments-rss": "Comments (RSS)",
50
66
  "wordpress:comments-rdf": "Comments (RDF)",
51
67
  "wordpress:comments-atom": "Comments (Atom)",
52
- "blogspot:label": "Label",
68
+ "wordpress:post-comments-rss": "Post comments (RSS)",
69
+ "wordpress:post-comments-rdf": "Post comments (RDF)",
70
+ "wordpress:post-comments-atom": "Post comments (Atom)",
53
71
  "blogspot:posts-atom": "Posts (Atom)",
54
72
  "blogspot:posts-rss": "Posts (RSS)",
73
+ "blogspot:posts-summary-atom": "Posts summary (Atom)",
74
+ "blogspot:posts-summary-rss": "Posts summary (RSS)",
75
+ "blogspot:comments-atom": "Comments (Atom)",
76
+ "blogspot:comments-rss": "Comments (RSS)",
77
+ "blogspot:label-atom": "Label (Atom)",
78
+ "blogspot:label-rss": "Label (RSS)",
79
+ "blogspot:post-comments-atom": "Post comments (Atom)",
80
+ "blogspot:post-comments-rss": "Post comments (RSS)",
55
81
  "behance:portfolio": "Portfolio",
56
82
  "behance:appreciated": "Appreciated",
83
+ "behance:projects": "Featured projects",
84
+ "behance:featured": "Featured by Adobe",
57
85
  "bluesky:posts": "Posts",
58
86
  "dailymotion:videos": "Videos",
59
87
  "dailymotion:playlist": "Playlist",
88
+ "dailymotion:channel": "Channel",
89
+ "dailymotion:trending": "Trending",
90
+ "dailymotion:search": "Search",
60
91
  "deviantart:tag": "Tag",
61
92
  "deviantart:favorites": "Favorites",
62
93
  "deviantart:gallery": "Gallery",
63
94
  "deviantart:deviations": "Deviations",
95
+ "deviantart:journal": "Journal",
96
+ "deviantart:daily-deviations": "Daily Deviations",
97
+ "deviantart:popular": "Popular",
64
98
  "devto:posts": "Posts",
65
99
  "devto:tag": "Tag",
100
+ "devto:community": "Community",
101
+ "devto:latest": "Latest",
66
102
  "github-gist:gists": "Gists",
67
103
  "github-gist:starred": "Starred",
104
+ "github-gist:forks": "Forks",
105
+ "github-gist:discover": "Discover",
68
106
  "kickstarter:updates": "Updates",
69
107
  "kickstarter:projects": "Projects",
70
108
  "letterboxd:diary": "Diary",
109
+ "letterboxd:journal": "Journal",
71
110
  "lobsters:tag": "Tag",
72
111
  "lobsters:domain": "Domain",
73
112
  "lobsters:stories": "Stories",
@@ -76,11 +115,15 @@ var hints = {
76
115
  "lobsters:comments": "Comments",
77
116
  "mastodon:posts": "Posts",
78
117
  "mastodon:tag": "Tag",
118
+ "mastodon:tagged": "Tagged",
119
+ "mastodon:replies": "Posts with replies",
120
+ "mastodon:media": "Media",
79
121
  "medium:posts": "Posts",
80
122
  "medium:tag": "Tag",
81
123
  "medium:tagged": "Tagged",
82
124
  "medium:publication": "Publication",
83
125
  "pinterest:pins": "Pins",
126
+ "pinterest:board": "Board",
84
127
  "producthunt:topic": "Topic",
85
128
  "producthunt:category": "Category",
86
129
  "producthunt:products": "Products",
@@ -88,18 +131,33 @@ var hints = {
88
131
  "stackexchange:tag": "Tag",
89
132
  "stackexchange:question": "Question",
90
133
  "stackexchange:user": "User",
134
+ "stackexchange:newest": "Newest questions",
135
+ "stackexchange:collective": "Collective",
91
136
  "steam:news": "News",
137
+ "steam:news-global": "News (global)",
138
+ "steam:daily-deals": "Daily deals",
92
139
  "steam:group": "Group",
93
140
  "substack:newsletter": "Newsletter",
94
141
  "tumblr:posts": "Posts",
95
142
  "tumblr:tag": "Tag",
96
143
  "goodreads:updates": "Updates",
97
144
  "goodreads:reviews": "Reviews",
98
- "sourceforge:activity": "Activity",
145
+ "goodreads:shelf": "Shelf",
146
+ "sourceforge:activity": "Recent activity",
147
+ "sourceforge:files": "File releases",
148
+ "sourceforge:news-rss": "News (RSS)",
149
+ "sourceforge:news-atom": "News (Atom)",
150
+ "sourceforge:discussion": "Discussion",
151
+ "sourceforge:discussion-atom": "Discussion (Atom)",
152
+ "sourceforge:project-feed": "Project feed",
153
+ "sourceforge:bugs": "Bugs",
154
+ "velog:posts": "Posts",
155
+ "velog:trending": "Trending",
99
156
  "vimeo:videos": "Videos",
100
157
  "vimeo:likes": "Likes",
101
158
  "vimeo:channel": "Channel",
102
159
  "vimeo:group": "Group",
160
+ "vimeo:album": "Album",
103
161
  "hashnode:blog": "Blog",
104
162
  "paragraph:blog": "Blog",
105
163
  "hatenablog:posts-rss": "Posts (RSS)",
@@ -111,10 +169,14 @@ var hints = {
111
169
  "itchio:devlog": "Devlog",
112
170
  "itchio:games": "Games",
113
171
  "itchio:tag": "Tag",
172
+ "itchio:platform": "Platform",
173
+ "itchio:genre": "Genre",
174
+ "itchio:made-with": "Made with",
114
175
  "itchio:section": "Section",
115
176
  "itchio:featured": "Featured",
116
177
  "itchio:new": "New",
117
178
  "itchio:sales": "Sales",
179
+ "itchio:blog": "Blog",
118
180
  "csdn:blog": "Blog",
119
181
  "douban:interests": "Interests",
120
182
  "douban:reviews": "Reviews",
@@ -127,7 +189,149 @@ var hints = {
127
189
  "ximalaya:album": "Album",
128
190
  "lemmy:community": "Community",
129
191
  "lemmy:user": "User",
130
- "apple-podcasts:podcast": "Podcast"
192
+ "lemmy:all": "All",
193
+ "lemmy:local": "Local",
194
+ "apple-podcasts:podcast": "Podcast",
195
+ "writeas:blog": "Blog",
196
+ "writeas:tag": "Tag",
197
+ "prose:blog": "Blog",
198
+ "prose:tag": "Tag",
199
+ "prose:discovery": "Discovery",
200
+ "pagecord:blog": "Blog",
201
+ "listed:blog": "Blog",
202
+ "fireside:podcast-rss": "Podcast (RSS)",
203
+ "fireside:podcast-json": "Podcast (JSON)",
204
+ "exblog:posts-rss": "Posts (RSS)",
205
+ "exblog:posts-atom": "Posts (Atom)",
206
+ "exblog:category-rss": "Category (RSS)",
207
+ "exblog:category-atom": "Category (Atom)",
208
+ "dreamwidth:posts-rss": "Posts (RSS)",
209
+ "dreamwidth:posts-atom": "Posts (Atom)",
210
+ "dreamwidth:posts-tag-rss": "Tag (RSS)",
211
+ "dreamwidth:posts-tag-atom": "Tag (Atom)",
212
+ "dreamwidth:userpics-atom": "Userpics (Atom)",
213
+ "buttondown:newsletter": "Newsletter",
214
+ "bearblog:posts-atom": "Posts (Atom)",
215
+ "bearblog:posts-rss": "Posts (RSS)",
216
+ "bearblog:tag-atom": "Tag (Atom)",
217
+ "bearblog:tag-rss": "Tag (RSS)",
218
+ "bearblog:discover-atom": "Trending (Atom)",
219
+ "bearblog:discover-rss": "Trending (RSS)",
220
+ "transistor:podcast": "Podcast",
221
+ "odysee:videos": "Videos",
222
+ "myanimelist:anime": "Anime list",
223
+ "myanimelist:manga": "Manga list",
224
+ "myanimelist:recently-watched": "Recently watched",
225
+ "myanimelist:recently-read": "Recently read",
226
+ "myanimelist:news": "News",
227
+ "myanimelist:featured": "Featured",
228
+ "hackernews:front": "Front page",
229
+ "hackernews:show": "Show HN",
230
+ "tistory:blog": "Blog",
231
+ "note:blog": "Blog",
232
+ "note:hashtag": "Hashtag",
233
+ "note:magazine": "Magazine",
234
+ "note:featured": "Featured",
235
+ "artstation:portfolio": "Portfolio",
236
+ "artstation:artwork": "Artwork",
237
+ "artstation:artwork-trending": "Artwork (Trending)",
238
+ "nebula:videos": "Videos",
239
+ "nebula:videos-plus": "Videos (Plus)",
240
+ "nebula:videos-all": "All Videos",
241
+ "nebula:videos-all-plus": "All Videos (Plus)",
242
+ "nebula:category": "Category",
243
+ "nebula:category-plus": "Category (Plus)",
244
+ "nebula:channels": "Recently Added Channels",
245
+ "acast:podcast": "Podcast",
246
+ "ameblo:posts-rss": "Posts (RSS)",
247
+ "ameblo:posts-atom": "Posts (Atom)",
248
+ "ameblo:posts-rdf": "Posts (RDF)",
249
+ "arena:profile": "Profile",
250
+ "arena:channel": "Channel",
251
+ "arena:editorial": "Editorial",
252
+ "audioboom:podcast": "Podcast",
253
+ "bookwyrm:activity": "Activity",
254
+ "bookwyrm:reviews": "Reviews",
255
+ "bookwyrm:quotes": "Quotes",
256
+ "bookwyrm:comments": "Comments",
257
+ "bookwyrm:shelf": "Shelf",
258
+ "buzzsprout:podcast": "Podcast",
259
+ "discourse:latest": "Latest",
260
+ "discourse:posts": "Latest posts",
261
+ "discourse:top": "Top",
262
+ "discourse:category": "Category",
263
+ "discourse:topic": "Topic",
264
+ "discourse:activity": "Activity",
265
+ "friendica:posts": "Posts",
266
+ "friendica:comments": "Comments",
267
+ "friendica:replies": "Replies",
268
+ "friendica:activity": "Activity",
269
+ "ghost:blog": "Blog",
270
+ "ghost:tag": "Tag",
271
+ "ghost:author": "Author",
272
+ "hearthis:tracks": "Tracks",
273
+ "hey-world:blog": "Blog",
274
+ "insanejournal:posts-rss": "Posts (RSS)",
275
+ "insanejournal:posts-atom": "Posts (Atom)",
276
+ "insanejournal:posts-tag-rss": "Tag (RSS)",
277
+ "insanejournal:posts-tag-atom": "Tag (Atom)",
278
+ "insanejournal:userpics-atom": "Userpics (Atom)",
279
+ "libsyn:podcast": "Podcast",
280
+ "livejournal:posts-rss": "Posts (RSS)",
281
+ "livejournal:posts-atom": "Posts (Atom)",
282
+ "livejournal:posts-tag-rss": "Tag (RSS)",
283
+ "livejournal:posts-tag-atom": "Tag (Atom)",
284
+ "livejournal:userpics-atom": "Userpics (Atom)",
285
+ "mataroa:blog": "Blog",
286
+ "microblog:posts-rss": "Posts (RSS)",
287
+ "microblog:posts-json": "Posts (JSON)",
288
+ "microblog:podcast": "Podcast",
289
+ "microblog:podcast-json": "Podcast (JSON)",
290
+ "microblog:category-rss": "Category (RSS)",
291
+ "microblog:category-json": "Category (JSON)",
292
+ "microblog:archive": "Archive",
293
+ "microblog:photos": "Photos",
294
+ "microblog:replies": "Replies",
295
+ "misskey:posts-atom": "Posts (Atom)",
296
+ "misskey:posts-rss": "Posts (RSS)",
297
+ "misskey:posts-json": "Posts (JSON)",
298
+ "naver-blog:blog": "Blog",
299
+ "observable:notebooks": "Notebooks",
300
+ "observable:collection": "Collection",
301
+ "observable:recent": "Recent",
302
+ "observable:trending": "Trending",
303
+ "pika:posts-atom": "Posts (Atom)",
304
+ "pika:posts-rss": "Posts (RSS)",
305
+ "pika:tag-atom": "Tag (Atom)",
306
+ "pika:tag-rss": "Tag (RSS)",
307
+ "pixelfed:posts": "Posts",
308
+ "pleroma:posts": "Posts",
309
+ "pleroma:posts-rss": "Posts (RSS)",
310
+ "podbean:podcast": "Podcast",
311
+ "podigee:podcast": "Podcast",
312
+ "posthaven:posts": "Posts",
313
+ "posthaven:tag": "Tag",
314
+ "qiita:posts": "Posts",
315
+ "qiita:tag": "Tag",
316
+ "qiita:organization": "Organization",
317
+ "qiita:popular": "Popular items",
318
+ "qiita:zine": "Qiita Zine",
319
+ "rss-com:podcast": "Podcast",
320
+ "seesaa:posts-rss2": "Posts (RSS 2.0)",
321
+ "seesaa:posts-rdf": "Posts (RDF)",
322
+ "spreaker:podcast": "Podcast",
323
+ "tildes:topics-rss": "Topics (RSS)",
324
+ "tildes:topics-atom": "Topics (Atom)",
325
+ "tildes:group-rss": "Group (RSS)",
326
+ "tildes:group-atom": "Group (Atom)",
327
+ "weblog-lol:posts-rss": "Posts (RSS)",
328
+ "weblog-lol:posts-atom": "Posts (Atom)",
329
+ "weblog-lol:posts-json": "Posts (JSON)",
330
+ "weebly:blog": "Blog",
331
+ "zenn:posts": "Posts",
332
+ "zenn:topic": "Topic",
333
+ "zenn:publication": "Publication",
334
+ "zenn:trending": "Trending"
131
335
  };
132
336
  //#endregion
133
337
  export { errors, hints };
@@ -6,6 +6,7 @@ import { PlatformMethodOptions } from "./uris/platform/types.js";
6
6
 
7
7
  //#region src/common/types.d.ts
8
8
  type MaybePromise<T> = T | Promise<T>;
9
+ type Pattern = string | RegExp;
9
10
  type UriEntry = string | Array<string>;
10
11
  type DiscoverUriHint = {
11
12
  key: string;
@@ -86,4 +87,4 @@ type DiscoverOptions<TValid, TMethods extends DiscoverMethod = DiscoverMethod> =
86
87
  includeInvalid?: boolean;
87
88
  };
88
89
  //#endregion
89
- export { DiscoverExtractFn, DiscoverFetchFn, DiscoverFetchFnOptions, DiscoverFetchFnResponse, DiscoverInput, DiscoverInputObject, DiscoverMethod, DiscoverMethodsConfig, DiscoverOnProgressFn, DiscoverOptions, DiscoverProgress, DiscoverResolveSiteUrlFn, DiscoverResolveUrlFn, DiscoverResult, DiscoverUriEntry, DiscoverUriHint, LinkSelector, MaybePromise, UriEntry };
90
+ export { DiscoverExtractFn, DiscoverFetchFn, DiscoverFetchFnOptions, DiscoverFetchFnResponse, DiscoverInput, DiscoverInputObject, DiscoverMethod, DiscoverMethodsConfig, DiscoverOnProgressFn, DiscoverOptions, DiscoverProgress, DiscoverResolveSiteUrlFn, DiscoverResolveUrlFn, DiscoverResult, DiscoverUriEntry, DiscoverUriHint, LinkSelector, MaybePromise, Pattern, UriEntry };
@@ -1,9 +1,9 @@
1
1
  import { parseFeed } from "feedsmith";
2
2
 
3
3
  //#region src/common/uris/feed/types.d.ts
4
- type FeedMethodData = ReturnType<typeof parseFeed>;
4
+ type FeedMethodData = ReturnType<typeof parseFeed<string>>;
5
5
  type FeedMethodOptions = {
6
6
  extractUrls: (params: FeedMethodData) => Array<string>;
7
7
  };
8
8
  //#endregion
9
- export { FeedMethodOptions };
9
+ export { FeedMethodData, FeedMethodOptions };
@@ -1,12 +1,12 @@
1
- import { LinkSelector } from "../../types.js";
1
+ import { LinkSelector, Pattern } from "../../types.js";
2
2
 
3
3
  //#region src/common/uris/html/types.d.ts
4
4
  type HtmlMethodOptions = {
5
5
  baseUrl?: string;
6
6
  linkSelectors: Array<LinkSelector>;
7
- anchorUris: Array<string>;
8
- anchorIgnoredUris: Array<string>;
9
- anchorLabels: Array<string>;
7
+ anchorUris: Array<Pattern>;
8
+ anchorIgnoredUris: Array<Pattern>;
9
+ anchorLabels: Array<Pattern>;
10
10
  };
11
11
  //#endregion
12
12
  export { HtmlMethodOptions };
@@ -1,10 +1,12 @@
1
+ import { Pattern } from "./types.js";
2
+
1
3
  //#region src/common/utils.d.ts
2
4
  declare const isSubdomainOf: (url: string, domains: string | Array<string>) => boolean;
3
5
  declare const isHostOf: (url: string, hosts: string | Array<string>) => boolean;
4
- declare const includesAnyOf: (value: string, patterns: Array<string>, parser?: (value: string) => string) => boolean;
5
- declare const isAnyOf: (value: string, patterns: Array<string>, parser?: (value: string) => string) => boolean;
6
- declare const anyWordMatchesAnyOf: (value: string, patterns: Array<string>) => boolean;
7
- declare const endsWithAnyOf: (value: string, patterns: Array<string>) => boolean;
6
+ declare const includesAnyOf: (value: string, patterns: Array<Pattern>, parser?: (value: string) => string) => boolean;
7
+ declare const isAnyOf: (value: string, patterns: Array<Pattern>, parser?: (value: string) => string) => boolean;
8
+ declare const anyWordMatchesAnyOf: (value: string, patterns: Array<Pattern>) => boolean;
9
+ declare const endsWithAnyOf: (value: string, patterns: Array<Pattern>) => boolean;
8
10
  declare const omitEmpty: <T>(array: Array<T | null | undefined>) => Array<T>;
9
11
  //#endregion
10
12
  export { anyWordMatchesAnyOf, endsWithAnyOf, includesAnyOf, isAnyOf, isHostOf, isSubdomainOf, omitEmpty };
@@ -24,18 +24,27 @@ const isHostOf = (url, hosts) => {
24
24
  };
25
25
  const includesAnyOf = (value, patterns, parser) => {
26
26
  const parsedValue = parser ? parser(value) : value?.toLowerCase();
27
- return patterns.some((pattern) => pattern && parsedValue?.includes(pattern.toLowerCase()));
27
+ return patterns.some((pattern) => {
28
+ if (pattern instanceof RegExp) return pattern.test(parsedValue);
29
+ return pattern && parsedValue?.includes(pattern.toLowerCase());
30
+ });
28
31
  };
29
32
  const isAnyOf = (value, patterns, parser) => {
30
33
  const parsedValue = parser ? parser(value) : value?.toLowerCase()?.trim();
31
- return patterns.some((pattern) => parsedValue === pattern.toLowerCase().trim());
34
+ return patterns.some((pattern) => {
35
+ if (pattern instanceof RegExp) return pattern.test(parsedValue);
36
+ return parsedValue === pattern.toLowerCase().trim();
37
+ });
32
38
  };
33
39
  const anyWordMatchesAnyOf = (value, patterns) => {
34
40
  return value.toLowerCase().split(whitespaceRegex).some((word) => isAnyOf(word, patterns));
35
41
  };
36
42
  const endsWithAnyOf = (value, patterns) => {
37
43
  const lowerValue = value.toLowerCase();
38
- return patterns.some((pattern) => pattern && lowerValue.endsWith(pattern.toLowerCase()));
44
+ return patterns.some((pattern) => {
45
+ if (pattern instanceof RegExp) return pattern.test(lowerValue);
46
+ return pattern && lowerValue.endsWith(pattern.toLowerCase());
47
+ });
39
48
  };
40
49
  const isOfAllowedMimeType = (type, allowedTypes) => {
41
50
  if (allowedTypes.length === 0) return true;
@@ -12,9 +12,10 @@ declare const urisComprehensive: Array<UriEntry>;
12
12
  declare const ignoredUris: string[];
13
13
  declare const anchorLabels: string[];
14
14
  declare const linkSelectors: Array<LinkSelector>;
15
+ declare const anchorPathSegments: RegExp[];
15
16
  declare const defaultHtmlOptions: Omit<HtmlMethodOptions, 'baseUrl'>;
16
17
  declare const defaultHeadersOptions: Omit<HeadersMethodOptions, 'baseUrl'>;
17
18
  declare const defaultGuessOptions: Omit<GuessMethodOptions, 'baseUrl'>;
18
19
  declare const defaultPlatformOptions: Omit<PlatformMethodOptions, 'baseUrl'>;
19
20
  //#endregion
20
- export { anchorLabels, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, defaultPlatformOptions, ignoredUris, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
21
+ export { anchorLabels, anchorPathSegments, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, defaultPlatformOptions, ignoredUris, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
@@ -8,35 +8,86 @@ import { lobstersHandler } from "./platform/handlers/lobsters.js";
8
8
  import { redditHandler } from "./platform/handlers/reddit.js";
9
9
  import { sourceforgeHandler } from "./platform/handlers/sourceforge.js";
10
10
  import { tumblrHandler } from "./platform/handlers/tumblr.js";
11
+ import { acastHandler } from "./platform/handlers/acast.js";
12
+ import { amebloHandler } from "./platform/handlers/ameblo.js";
11
13
  import { applePodcastsHandler } from "./platform/handlers/applePodcasts.js";
14
+ import { arenaHandler } from "./platform/handlers/arena.js";
15
+ import { artstationHandler } from "./platform/handlers/artstation.js";
16
+ import { audioboomHandler } from "./platform/handlers/audioboom.js";
17
+ import { bearblogHandler } from "./platform/handlers/bearblog.js";
12
18
  import { behanceHandler } from "./platform/handlers/behance.js";
13
19
  import { blogspotHandler } from "./platform/handlers/blogspot.js";
14
20
  import { blueskyHandler } from "./platform/handlers/bluesky.js";
21
+ import { bookwyrmHandler } from "./platform/handlers/bookwyrm.js";
22
+ import { buttondownHandler } from "./platform/handlers/buttondown.js";
23
+ import { buzzsproutHandler } from "./platform/handlers/buzzsprout.js";
15
24
  import { csdnHandler } from "./platform/handlers/csdn.js";
16
25
  import { dailymotionHandler } from "./platform/handlers/dailymotion.js";
26
+ import { discourseHandler } from "./platform/handlers/discourse.js";
17
27
  import { doubanHandler } from "./platform/handlers/douban.js";
28
+ import { dreamwidthHandler } from "./platform/handlers/dreamwidth.js";
29
+ import { exblogHandler } from "./platform/handlers/exblog.js";
30
+ import { firesideHandler } from "./platform/handlers/fireside.js";
31
+ import { friendicaHandler } from "./platform/handlers/friendica.js";
32
+ import { ghostHandler } from "./platform/handlers/ghost.js";
18
33
  import { goodreadsHandler } from "./platform/handlers/goodreads.js";
34
+ import { hackernewsHandler } from "./platform/handlers/hackernews.js";
19
35
  import { hashnodeHandler } from "./platform/handlers/hashnode.js";
20
36
  import { hatenablogHandler } from "./platform/handlers/hatenablog.js";
37
+ import { hearthisHandler } from "./platform/handlers/hearthis.js";
38
+ import { heyWorldHandler } from "./platform/handlers/heyWorld.js";
39
+ import { insanejournalHandler } from "./platform/handlers/insanejournal.js";
21
40
  import { itchioHandler } from "./platform/handlers/itchio.js";
22
41
  import { kickstarterHandler } from "./platform/handlers/kickstarter.js";
23
42
  import { lemmyHandler } from "./platform/handlers/lemmy.js";
24
43
  import { letterboxdHandler } from "./platform/handlers/letterboxd.js";
44
+ import { libsynHandler } from "./platform/handlers/libsyn.js";
45
+ import { listedHandler } from "./platform/handlers/listed.js";
46
+ import { livejournalHandler } from "./platform/handlers/livejournal.js";
25
47
  import { mastodonHandler } from "./platform/handlers/mastodon.js";
48
+ import { mataroaHandler } from "./platform/handlers/mataroa.js";
26
49
  import { mediumHandler } from "./platform/handlers/medium.js";
50
+ import { microblogHandler } from "./platform/handlers/microblog.js";
51
+ import { misskeyHandler } from "./platform/handlers/misskey.js";
52
+ import { myanimelistHandler } from "./platform/handlers/myanimelist.js";
53
+ import { naverBlogHandler } from "./platform/handlers/naverBlog.js";
54
+ import { nebulaHandler } from "./platform/handlers/nebula.js";
55
+ import { noteHandler } from "./platform/handlers/note.js";
56
+ import { observableHandler } from "./platform/handlers/observable.js";
57
+ import { odyseeHandler } from "./platform/handlers/odysee.js";
58
+ import { pagecordHandler } from "./platform/handlers/pagecord.js";
27
59
  import { paragraphHandler } from "./platform/handlers/paragraph.js";
60
+ import { pikaHandler } from "./platform/handlers/pika.js";
28
61
  import { pinterestHandler } from "./platform/handlers/pinterest.js";
62
+ import { pixelfedHandler } from "./platform/handlers/pixelfed.js";
63
+ import { pleromaHandler } from "./platform/handlers/pleroma.js";
64
+ import { podbeanHandler } from "./platform/handlers/podbean.js";
65
+ import { podigeeHandler } from "./platform/handlers/podigee.js";
66
+ import { posthavenHandler } from "./platform/handlers/posthaven.js";
29
67
  import { producthuntHandler } from "./platform/handlers/producthunt.js";
68
+ import { proseHandler } from "./platform/handlers/prose.js";
69
+ import { qiitaHandler } from "./platform/handlers/qiita.js";
70
+ import { rssComHandler } from "./platform/handlers/rssCom.js";
71
+ import { seesaaHandler } from "./platform/handlers/seesaa.js";
30
72
  import { soundcloudHandler } from "./platform/handlers/soundcloud.js";
73
+ import { spreakerHandler } from "./platform/handlers/spreaker.js";
31
74
  import { stackExchangeHandler } from "./platform/handlers/stackExchange.js";
32
75
  import { steamHandler } from "./platform/handlers/steam.js";
33
76
  import { substackHandler } from "./platform/handlers/substack.js";
77
+ import { tildesHandler } from "./platform/handlers/tildes.js";
78
+ import { tistoryHandler } from "./platform/handlers/tistory.js";
79
+ import { transistorHandler } from "./platform/handlers/transistor.js";
34
80
  import { v2exHandler } from "./platform/handlers/v2ex.js";
81
+ import { velogHandler } from "./platform/handlers/velog.js";
35
82
  import { vimeoHandler } from "./platform/handlers/vimeo.js";
83
+ import { weblogLolHandler } from "./platform/handlers/weblogLol.js";
84
+ import { weeblyHandler } from "./platform/handlers/weebly.js";
36
85
  import { wordpressHandler } from "./platform/handlers/wordpress.js";
37
86
  import { wpengineHandler } from "./platform/handlers/wpengine.js";
87
+ import { writeasHandler } from "./platform/handlers/writeas.js";
38
88
  import { ximalayaHandler } from "./platform/handlers/ximalaya.js";
39
89
  import { youtubeHandler } from "./platform/handlers/youtube.js";
90
+ import { zennHandler } from "./platform/handlers/zenn.js";
40
91
  //#region src/feeds/defaults.ts
41
92
  const mimeTypes = [
42
93
  "application/rss+xml",
@@ -115,54 +166,110 @@ const linkSelectors = [{
115
166
  rel: "alternate",
116
167
  types: mimeTypes
117
168
  }, { rel: "feed" }];
169
+ const anchorPathSegments = [
170
+ /\/rss\//,
171
+ /\/atom\//,
172
+ /\/feed\//
173
+ ];
118
174
  const defaultHtmlOptions = {
119
175
  linkSelectors,
120
- anchorUris: urisComprehensive.flat(),
176
+ anchorUris: [...urisComprehensive.flat(), ...anchorPathSegments],
121
177
  anchorIgnoredUris: ignoredUris,
122
178
  anchorLabels
123
179
  };
124
180
  const defaultHeadersOptions = { linkSelectors };
125
181
  const defaultGuessOptions = { uris: urisBalanced };
126
182
  const defaultPlatformOptions = { handlers: [
183
+ acastHandler,
184
+ amebloHandler,
127
185
  applePodcastsHandler,
186
+ arenaHandler,
187
+ artstationHandler,
188
+ audioboomHandler,
189
+ bearblogHandler,
128
190
  behanceHandler,
129
191
  blogspotHandler,
130
192
  blueskyHandler,
131
- csdnHandler,
193
+ bookwyrmHandler,
194
+ buttondownHandler,
195
+ buzzsproutHandler,
132
196
  codebergHandler,
133
- doubanHandler,
134
- deviantartHandler,
197
+ csdnHandler,
135
198
  dailymotionHandler,
199
+ deviantartHandler,
136
200
  devtoHandler,
137
- goodreadsHandler,
201
+ discourseHandler,
202
+ doubanHandler,
203
+ dreamwidthHandler,
204
+ exblogHandler,
205
+ firesideHandler,
206
+ friendicaHandler,
207
+ ghostHandler,
138
208
  githubHandler,
139
- hashnodeHandler,
140
- hatenablogHandler,
141
209
  githubGistHandler,
142
210
  gitlabHandler,
211
+ goodreadsHandler,
212
+ hackernewsHandler,
213
+ hashnodeHandler,
214
+ hatenablogHandler,
215
+ hearthisHandler,
216
+ heyWorldHandler,
217
+ insanejournalHandler,
143
218
  itchioHandler,
144
219
  kickstarterHandler,
145
220
  lemmyHandler,
146
221
  letterboxdHandler,
222
+ libsynHandler,
223
+ listedHandler,
224
+ livejournalHandler,
147
225
  lobstersHandler,
148
226
  mastodonHandler,
227
+ mataroaHandler,
149
228
  mediumHandler,
229
+ microblogHandler,
230
+ misskeyHandler,
231
+ myanimelistHandler,
232
+ naverBlogHandler,
233
+ nebulaHandler,
234
+ noteHandler,
235
+ observableHandler,
236
+ odyseeHandler,
237
+ pagecordHandler,
150
238
  paragraphHandler,
239
+ pikaHandler,
151
240
  pinterestHandler,
241
+ pixelfedHandler,
242
+ pleromaHandler,
243
+ podbeanHandler,
244
+ podigeeHandler,
245
+ posthavenHandler,
152
246
  producthuntHandler,
247
+ proseHandler,
248
+ qiitaHandler,
153
249
  redditHandler,
250
+ rssComHandler,
251
+ seesaaHandler,
154
252
  soundcloudHandler,
155
253
  sourceforgeHandler,
254
+ spreakerHandler,
156
255
  stackExchangeHandler,
157
256
  steamHandler,
158
257
  substackHandler,
258
+ tildesHandler,
259
+ tistoryHandler,
260
+ transistorHandler,
159
261
  tumblrHandler,
160
262
  v2exHandler,
263
+ velogHandler,
161
264
  vimeoHandler,
265
+ weblogLolHandler,
266
+ weeblyHandler,
162
267
  wordpressHandler,
163
268
  wpengineHandler,
269
+ writeasHandler,
164
270
  ximalayaHandler,
165
- youtubeHandler
271
+ youtubeHandler,
272
+ zennHandler
166
273
  ] };
167
274
  //#endregion
168
- export { anchorLabels, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, defaultPlatformOptions, ignoredUris, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
275
+ export { anchorLabels, anchorPathSegments, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, defaultPlatformOptions, ignoredUris, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
@@ -24,8 +24,8 @@ const defaultExtractFn = ({ content, url }) => {
24
24
  url,
25
25
  isValid: true,
26
26
  format,
27
- title: feed.title,
28
- description: feed.subtitle,
27
+ title: feed.title?.value,
28
+ description: feed.subtitle?.value,
29
29
  siteUrl
30
30
  };
31
31
  if (format === "json") return {