feedscout 1.8.1 → 1.9.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 (192) hide show
  1. package/README.md +1 -1
  2. package/dist/blogrolls/defaults.cjs +18 -11
  3. package/dist/blogrolls/defaults.d.cts +1 -2
  4. package/dist/blogrolls/defaults.d.ts +1 -2
  5. package/dist/blogrolls/defaults.js +19 -11
  6. package/dist/blogrolls.cjs +0 -1
  7. package/dist/blogrolls.d.cts +2 -2
  8. package/dist/blogrolls.d.ts +2 -2
  9. package/dist/blogrolls.js +2 -2
  10. package/dist/common/locales.cjs +214 -10
  11. package/dist/common/locales.js +214 -10
  12. package/dist/common/types.d.cts +2 -1
  13. package/dist/common/types.d.ts +2 -1
  14. package/dist/common/uris/html/handlers.cjs +18 -0
  15. package/dist/common/uris/html/handlers.js +18 -0
  16. package/dist/common/uris/html/index.cjs +17 -1
  17. package/dist/common/uris/html/index.js +17 -1
  18. package/dist/common/uris/html/types.d.cts +6 -4
  19. package/dist/common/uris/html/types.d.ts +6 -4
  20. package/dist/common/utils.cjs +12 -3
  21. package/dist/common/utils.d.cts +6 -4
  22. package/dist/common/utils.d.ts +6 -4
  23. package/dist/common/utils.js +12 -3
  24. package/dist/feeds/defaults.cjs +129 -10
  25. package/dist/feeds/defaults.d.cts +5 -3
  26. package/dist/feeds/defaults.d.ts +5 -3
  27. package/dist/feeds/defaults.js +128 -11
  28. package/dist/feeds/platform/handlers/acast.cjs +26 -0
  29. package/dist/feeds/platform/handlers/acast.js +26 -0
  30. package/dist/feeds/platform/handlers/ameblo.cjs +36 -0
  31. package/dist/feeds/platform/handlers/ameblo.js +36 -0
  32. package/dist/feeds/platform/handlers/applePodcasts.cjs +1 -1
  33. package/dist/feeds/platform/handlers/applePodcasts.js +1 -1
  34. package/dist/feeds/platform/handlers/arena.cjs +42 -0
  35. package/dist/feeds/platform/handlers/arena.js +42 -0
  36. package/dist/feeds/platform/handlers/artstation.cjs +52 -0
  37. package/dist/feeds/platform/handlers/artstation.js +52 -0
  38. package/dist/feeds/platform/handlers/audioboom.cjs +23 -0
  39. package/dist/feeds/platform/handlers/audioboom.js +23 -0
  40. package/dist/feeds/platform/handlers/bearblog.cjs +45 -0
  41. package/dist/feeds/platform/handlers/bearblog.js +45 -0
  42. package/dist/feeds/platform/handlers/behance.cjs +7 -0
  43. package/dist/feeds/platform/handlers/behance.js +7 -0
  44. package/dist/feeds/platform/handlers/blogspot.cjs +38 -2
  45. package/dist/feeds/platform/handlers/blogspot.js +38 -2
  46. package/dist/feeds/platform/handlers/bookwyrm.cjs +48 -0
  47. package/dist/feeds/platform/handlers/bookwyrm.js +48 -0
  48. package/dist/feeds/platform/handlers/buttondown.cjs +43 -0
  49. package/dist/feeds/platform/handlers/buttondown.js +43 -0
  50. package/dist/feeds/platform/handlers/buzzsprout.cjs +22 -0
  51. package/dist/feeds/platform/handlers/buzzsprout.js +22 -0
  52. package/dist/feeds/platform/handlers/codeberg.cjs +5 -5
  53. package/dist/feeds/platform/handlers/codeberg.js +5 -5
  54. package/dist/feeds/platform/handlers/dailymotion.cjs +16 -0
  55. package/dist/feeds/platform/handlers/dailymotion.js +16 -0
  56. package/dist/feeds/platform/handlers/deviantart.cjs +25 -6
  57. package/dist/feeds/platform/handlers/deviantart.js +25 -6
  58. package/dist/feeds/platform/handlers/devto.cjs +8 -0
  59. package/dist/feeds/platform/handlers/devto.js +8 -0
  60. package/dist/feeds/platform/handlers/discourse.cjs +70 -0
  61. package/dist/feeds/platform/handlers/discourse.js +70 -0
  62. package/dist/feeds/platform/handlers/dreamwidth.cjs +48 -0
  63. package/dist/feeds/platform/handlers/dreamwidth.js +48 -0
  64. package/dist/feeds/platform/handlers/exblog.cjs +35 -0
  65. package/dist/feeds/platform/handlers/exblog.js +35 -0
  66. package/dist/feeds/platform/handlers/fireside.cjs +24 -0
  67. package/dist/feeds/platform/handlers/fireside.js +24 -0
  68. package/dist/feeds/platform/handlers/friendica.cjs +44 -0
  69. package/dist/feeds/platform/handlers/friendica.js +44 -0
  70. package/dist/feeds/platform/handlers/ghost.cjs +30 -0
  71. package/dist/feeds/platform/handlers/ghost.js +30 -0
  72. package/dist/feeds/platform/handlers/github.cjs +6 -0
  73. package/dist/feeds/platform/handlers/github.js +6 -0
  74. package/dist/feeds/platform/handlers/githubGist.cjs +16 -5
  75. package/dist/feeds/platform/handlers/githubGist.js +16 -5
  76. package/dist/feeds/platform/handlers/gitlab.cjs +31 -13
  77. package/dist/feeds/platform/handlers/gitlab.js +31 -13
  78. package/dist/feeds/platform/handlers/goodreads.cjs +18 -8
  79. package/dist/feeds/platform/handlers/goodreads.js +18 -8
  80. package/dist/feeds/platform/handlers/hackernews.cjs +21 -0
  81. package/dist/feeds/platform/handlers/hackernews.js +21 -0
  82. package/dist/feeds/platform/handlers/hashnode.cjs +1 -1
  83. package/dist/feeds/platform/handlers/hashnode.js +1 -1
  84. package/dist/feeds/platform/handlers/hatenablog.cjs +4 -1
  85. package/dist/feeds/platform/handlers/hatenablog.js +4 -1
  86. package/dist/feeds/platform/handlers/hearthis.cjs +32 -0
  87. package/dist/feeds/platform/handlers/hearthis.js +32 -0
  88. package/dist/feeds/platform/handlers/heyWorld.cjs +18 -0
  89. package/dist/feeds/platform/handlers/heyWorld.js +18 -0
  90. package/dist/feeds/platform/handlers/insanejournal.cjs +69 -0
  91. package/dist/feeds/platform/handlers/insanejournal.js +69 -0
  92. package/dist/feeds/platform/handlers/itchio.cjs +24 -1
  93. package/dist/feeds/platform/handlers/itchio.js +24 -1
  94. package/dist/feeds/platform/handlers/lemmy.cjs +46 -4
  95. package/dist/feeds/platform/handlers/lemmy.js +46 -4
  96. package/dist/feeds/platform/handlers/letterboxd.cjs +4 -0
  97. package/dist/feeds/platform/handlers/letterboxd.js +4 -0
  98. package/dist/feeds/platform/handlers/libsyn.cjs +25 -0
  99. package/dist/feeds/platform/handlers/libsyn.js +25 -0
  100. package/dist/feeds/platform/handlers/listed.cjs +20 -0
  101. package/dist/feeds/platform/handlers/listed.js +20 -0
  102. package/dist/feeds/platform/handlers/livejournal.cjs +68 -0
  103. package/dist/feeds/platform/handlers/livejournal.js +68 -0
  104. package/dist/feeds/platform/handlers/mastodon.cjs +32 -0
  105. package/dist/feeds/platform/handlers/mastodon.js +32 -0
  106. package/dist/feeds/platform/handlers/mataroa.cjs +16 -0
  107. package/dist/feeds/platform/handlers/mataroa.js +16 -0
  108. package/dist/feeds/platform/handlers/medium.cjs +2 -2
  109. package/dist/feeds/platform/handlers/medium.js +2 -2
  110. package/dist/feeds/platform/handlers/microblog.cjs +55 -0
  111. package/dist/feeds/platform/handlers/microblog.js +55 -0
  112. package/dist/feeds/platform/handlers/misskey.cjs +40 -0
  113. package/dist/feeds/platform/handlers/misskey.js +40 -0
  114. package/dist/feeds/platform/handlers/myanimelist.cjs +43 -0
  115. package/dist/feeds/platform/handlers/myanimelist.js +43 -0
  116. package/dist/feeds/platform/handlers/naverBlog.cjs +21 -0
  117. package/dist/feeds/platform/handlers/naverBlog.js +21 -0
  118. package/dist/feeds/platform/handlers/nebula.cjs +68 -0
  119. package/dist/feeds/platform/handlers/nebula.js +68 -0
  120. package/dist/feeds/platform/handlers/note.cjs +53 -0
  121. package/dist/feeds/platform/handlers/note.js +53 -0
  122. package/dist/feeds/platform/handlers/observable.cjs +34 -0
  123. package/dist/feeds/platform/handlers/observable.js +34 -0
  124. package/dist/feeds/platform/handlers/odysee.cjs +20 -0
  125. package/dist/feeds/platform/handlers/odysee.js +20 -0
  126. package/dist/feeds/platform/handlers/pagecord.cjs +16 -0
  127. package/dist/feeds/platform/handlers/pagecord.js +16 -0
  128. package/dist/feeds/platform/handlers/paragraph.cjs +1 -2
  129. package/dist/feeds/platform/handlers/paragraph.js +1 -2
  130. package/dist/feeds/platform/handlers/pika.cjs +35 -0
  131. package/dist/feeds/platform/handlers/pika.js +35 -0
  132. package/dist/feeds/platform/handlers/pinterest.cjs +13 -0
  133. package/dist/feeds/platform/handlers/pinterest.js +13 -0
  134. package/dist/feeds/platform/handlers/pixelfed.cjs +46 -0
  135. package/dist/feeds/platform/handlers/pixelfed.js +46 -0
  136. package/dist/feeds/platform/handlers/pleroma.cjs +34 -0
  137. package/dist/feeds/platform/handlers/pleroma.js +34 -0
  138. package/dist/feeds/platform/handlers/podbean.cjs +29 -0
  139. package/dist/feeds/platform/handlers/podbean.js +29 -0
  140. package/dist/feeds/platform/handlers/podigee.cjs +29 -0
  141. package/dist/feeds/platform/handlers/podigee.js +29 -0
  142. package/dist/feeds/platform/handlers/posthaven.cjs +24 -0
  143. package/dist/feeds/platform/handlers/posthaven.js +24 -0
  144. package/dist/feeds/platform/handlers/prose.cjs +26 -0
  145. package/dist/feeds/platform/handlers/prose.js +26 -0
  146. package/dist/feeds/platform/handlers/qiita.cjs +58 -0
  147. package/dist/feeds/platform/handlers/qiita.js +58 -0
  148. package/dist/feeds/platform/handlers/reddit.cjs +83 -9
  149. package/dist/feeds/platform/handlers/reddit.js +83 -9
  150. package/dist/feeds/platform/handlers/rssCom.cjs +20 -0
  151. package/dist/feeds/platform/handlers/rssCom.js +20 -0
  152. package/dist/feeds/platform/handlers/seesaa.cjs +22 -0
  153. package/dist/feeds/platform/handlers/seesaa.js +22 -0
  154. package/dist/feeds/platform/handlers/sourceforge.cjs +37 -4
  155. package/dist/feeds/platform/handlers/sourceforge.js +37 -4
  156. package/dist/feeds/platform/handlers/spreaker.cjs +21 -0
  157. package/dist/feeds/platform/handlers/spreaker.js +21 -0
  158. package/dist/feeds/platform/handlers/stackExchange.cjs +26 -2
  159. package/dist/feeds/platform/handlers/stackExchange.js +26 -2
  160. package/dist/feeds/platform/handlers/steam.cjs +7 -0
  161. package/dist/feeds/platform/handlers/steam.js +7 -0
  162. package/dist/feeds/platform/handlers/tildes.cjs +41 -0
  163. package/dist/feeds/platform/handlers/tildes.js +41 -0
  164. package/dist/feeds/platform/handlers/tistory.cjs +16 -0
  165. package/dist/feeds/platform/handlers/tistory.js +16 -0
  166. package/dist/feeds/platform/handlers/transistor.cjs +29 -0
  167. package/dist/feeds/platform/handlers/transistor.js +29 -0
  168. package/dist/feeds/platform/handlers/velog.cjs +24 -0
  169. package/dist/feeds/platform/handlers/velog.js +24 -0
  170. package/dist/feeds/platform/handlers/vimeo.cjs +6 -0
  171. package/dist/feeds/platform/handlers/vimeo.js +6 -0
  172. package/dist/feeds/platform/handlers/weblogLol.cjs +26 -0
  173. package/dist/feeds/platform/handlers/weblogLol.js +26 -0
  174. package/dist/feeds/platform/handlers/weebly.cjs +25 -0
  175. package/dist/feeds/platform/handlers/weebly.js +25 -0
  176. package/dist/feeds/platform/handlers/wordpress.cjs +173 -28
  177. package/dist/feeds/platform/handlers/wordpress.js +173 -28
  178. package/dist/feeds/platform/handlers/writeas.cjs +51 -0
  179. package/dist/feeds/platform/handlers/writeas.js +51 -0
  180. package/dist/feeds/platform/handlers/ximalaya.cjs +1 -1
  181. package/dist/feeds/platform/handlers/ximalaya.js +1 -1
  182. package/dist/feeds/platform/handlers/youtube.cjs +4 -1
  183. package/dist/feeds/platform/handlers/youtube.js +4 -1
  184. package/dist/feeds/platform/handlers/zenn.cjs +54 -0
  185. package/dist/feeds/platform/handlers/zenn.js +54 -0
  186. package/dist/feeds.cjs +2 -0
  187. package/dist/feeds.d.cts +2 -2
  188. package/dist/feeds.d.ts +2 -2
  189. package/dist/feeds.js +2 -2
  190. package/dist/utils.d.cts +2 -1
  191. package/dist/utils.d.ts +2 -1
  192. package/package.json +6 -7
@@ -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.cjs";
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 };
@@ -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,6 +1,10 @@
1
1
  const require_utils = require("../../utils.cjs");
2
2
  //#region src/common/uris/html/handlers.ts
3
3
  const handleOpenTag = (context, name, attribs, _isImplied) => {
4
+ if (name === "base" && context.baseHref === void 0) {
5
+ const href = attribs.href?.trim();
6
+ if (href) context.baseHref = href;
7
+ }
4
8
  if (name === "link" && attribs.href) {
5
9
  const rel = attribs.rel?.toLowerCase();
6
10
  if (!rel) return;
@@ -16,6 +20,20 @@ const handleOpenTag = (context, name, attribs, _isImplied) => {
16
20
  context.currentAnchor.href = attribs.href;
17
21
  context.currentAnchor.text = "";
18
22
  if (require_utils.endsWithAnyOf(lowerHref, context.options.anchorUris)) context.discoveredUris.add(attribs.href);
23
+ if (context.options.anchorPathSegments?.length) {
24
+ let pathname;
25
+ try {
26
+ pathname = new URL(attribs.href, "https://feedscout.invalid").pathname;
27
+ } catch {}
28
+ if (pathname && require_utils.includesAnyOf(pathname, context.options.anchorPathSegments)) context.discoveredUris.add(attribs.href);
29
+ }
30
+ }
31
+ if (context.currentAnchor.href && context.options.anchorAttributes?.length) for (const attribute of context.options.anchorAttributes) {
32
+ const value = attribs[attribute];
33
+ if (value && require_utils.includesAnyOf(value, context.options.anchorLabels)) {
34
+ context.discoveredUris.add(context.currentAnchor.href);
35
+ break;
36
+ }
19
37
  }
20
38
  };
21
39
  const handleText = (context, text) => {
@@ -1,6 +1,10 @@
1
1
  import { endsWithAnyOf, includesAnyOf, matchesAnyOfLinkSelectors } from "../../utils.js";
2
2
  //#region src/common/uris/html/handlers.ts
3
3
  const handleOpenTag = (context, name, attribs, _isImplied) => {
4
+ if (name === "base" && context.baseHref === void 0) {
5
+ const href = attribs.href?.trim();
6
+ if (href) context.baseHref = href;
7
+ }
4
8
  if (name === "link" && attribs.href) {
5
9
  const rel = attribs.rel?.toLowerCase();
6
10
  if (!rel) return;
@@ -16,6 +20,20 @@ const handleOpenTag = (context, name, attribs, _isImplied) => {
16
20
  context.currentAnchor.href = attribs.href;
17
21
  context.currentAnchor.text = "";
18
22
  if (endsWithAnyOf(lowerHref, context.options.anchorUris)) context.discoveredUris.add(attribs.href);
23
+ if (context.options.anchorPathSegments?.length) {
24
+ let pathname;
25
+ try {
26
+ pathname = new URL(attribs.href, "https://feedscout.invalid").pathname;
27
+ } catch {}
28
+ if (pathname && includesAnyOf(pathname, context.options.anchorPathSegments)) context.discoveredUris.add(attribs.href);
29
+ }
30
+ }
31
+ if (context.currentAnchor.href && context.options.anchorAttributes?.length) for (const attribute of context.options.anchorAttributes) {
32
+ const value = attribs[attribute];
33
+ if (value && includesAnyOf(value, context.options.anchorLabels)) {
34
+ context.discoveredUris.add(context.currentAnchor.href);
35
+ break;
36
+ }
19
37
  }
20
38
  };
21
39
  const handleText = (context, text) => {
@@ -13,7 +13,23 @@ const discoverUrisFromHtml = (html, options) => {
13
13
  const parser = new htmlparser2.Parser(require_handlers.createHtmlUrisHandlers(context), { decodeEntities: true });
14
14
  parser.write(html);
15
15
  parser.end();
16
- return [...context.discoveredUris];
16
+ const uris = [...context.discoveredUris];
17
+ if (context.baseHref) {
18
+ let base;
19
+ try {
20
+ base = options.baseUrl ? new URL(context.baseHref, options.baseUrl).href : context.baseHref;
21
+ } catch {
22
+ base = options.baseUrl;
23
+ }
24
+ return uris.map((uri) => {
25
+ try {
26
+ return new URL(uri, base).href;
27
+ } catch {
28
+ return uri;
29
+ }
30
+ });
31
+ }
32
+ return uris;
17
33
  };
18
34
  //#endregion
19
35
  exports.discoverUrisFromHtml = discoverUrisFromHtml;
@@ -13,7 +13,23 @@ const discoverUrisFromHtml = (html, options) => {
13
13
  const parser = new Parser(createHtmlUrisHandlers(context), { decodeEntities: true });
14
14
  parser.write(html);
15
15
  parser.end();
16
- return [...context.discoveredUris];
16
+ const uris = [...context.discoveredUris];
17
+ if (context.baseHref) {
18
+ let base;
19
+ try {
20
+ base = options.baseUrl ? new URL(context.baseHref, options.baseUrl).href : context.baseHref;
21
+ } catch {
22
+ base = options.baseUrl;
23
+ }
24
+ return uris.map((uri) => {
25
+ try {
26
+ return new URL(uri, base).href;
27
+ } catch {
28
+ return uri;
29
+ }
30
+ });
31
+ }
32
+ return uris;
17
33
  };
18
34
  //#endregion
19
35
  export { discoverUrisFromHtml };
@@ -1,12 +1,14 @@
1
- import { LinkSelector } from "../../types.cjs";
1
+ import { LinkSelector, Pattern } from "../../types.cjs";
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
+ anchorPathSegments?: Array<Pattern>;
9
+ anchorIgnoredUris: Array<Pattern>;
10
+ anchorLabels: Array<Pattern>;
11
+ anchorAttributes?: Array<string>;
10
12
  };
11
13
  //#endregion
12
14
  export { HtmlMethodOptions };
@@ -1,12 +1,14 @@
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
+ anchorPathSegments?: Array<Pattern>;
9
+ anchorIgnoredUris: Array<Pattern>;
10
+ anchorLabels: Array<Pattern>;
11
+ anchorAttributes?: Array<string>;
10
12
  };
11
13
  //#endregion
12
14
  export { HtmlMethodOptions };
@@ -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;
@@ -1,10 +1,12 @@
1
+ import { Pattern } from "./types.cjs";
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 };
@@ -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;