feedscout 1.8.1 → 2.0.0-next.2
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.
- package/dist/common/discover/utils.d.ts +2 -3
- package/dist/common/uris/feed/types.d.ts +2 -2
- package/dist/feeds/extractors.js +2 -2
- package/package.json +24 -64
- package/dist/blogrolls/defaults.cjs +0 -51
- package/dist/blogrolls/defaults.d.cts +0 -17
- package/dist/blogrolls/extractors.cjs +0 -21
- package/dist/blogrolls/extractors.d.cts +0 -7
- package/dist/blogrolls/index.cjs +0 -25
- package/dist/blogrolls/index.d.cts +0 -7
- package/dist/blogrolls/types.d.cts +0 -6
- package/dist/blogrolls.cjs +0 -13
- package/dist/blogrolls.d.cts +0 -4
- package/dist/common/discover/defaults.cjs +0 -46
- package/dist/common/discover/defaults.d.cts +0 -6
- package/dist/common/discover/index.cjs +0 -105
- package/dist/common/discover/utils.cjs +0 -101
- package/dist/common/discover/utils.d.cts +0 -6
- package/dist/common/locales.cjs +0 -144
- package/dist/common/types.cjs +0 -10
- package/dist/common/types.d.cts +0 -89
- package/dist/common/uris/feed/index.cjs +0 -12
- package/dist/common/uris/feed/index.d.cts +0 -6
- package/dist/common/uris/feed/types.d.cts +0 -9
- package/dist/common/uris/guess/index.cjs +0 -8
- package/dist/common/uris/guess/index.d.cts +0 -7
- package/dist/common/uris/guess/types.d.cts +0 -10
- package/dist/common/uris/guess/utils.cjs +0 -42
- package/dist/common/uris/guess/utils.d.cts +0 -8
- package/dist/common/uris/headers/index.cjs +0 -26
- package/dist/common/uris/headers/index.d.cts +0 -6
- package/dist/common/uris/headers/types.d.cts +0 -9
- package/dist/common/uris/html/handlers.cjs +0 -45
- package/dist/common/uris/html/index.cjs +0 -19
- package/dist/common/uris/html/index.d.cts +0 -6
- package/dist/common/uris/html/types.d.cts +0 -12
- package/dist/common/uris/index.cjs +0 -32
- package/dist/common/uris/platform/index.cjs +0 -10
- package/dist/common/uris/platform/index.d.cts +0 -7
- package/dist/common/uris/platform/types.d.cts +0 -13
- package/dist/common/utils.cjs +0 -89
- package/dist/common/utils.d.cts +0 -10
- package/dist/favicons/defaults.cjs +0 -65
- package/dist/favicons/defaults.d.cts +0 -18
- package/dist/favicons/extractors.cjs +0 -25
- package/dist/favicons/extractors.d.cts +0 -7
- package/dist/favicons/index.cjs +0 -29
- package/dist/favicons/index.d.cts +0 -7
- package/dist/favicons/platform/handlers/bluesky.cjs +0 -27
- package/dist/favicons/platform/handlers/codeberg.cjs +0 -19
- package/dist/favicons/platform/handlers/deviantart.cjs +0 -29
- package/dist/favicons/platform/handlers/devto.cjs +0 -31
- package/dist/favicons/platform/handlers/github.cjs +0 -19
- package/dist/favicons/platform/handlers/githubGist.cjs +0 -19
- package/dist/favicons/platform/handlers/gitlab.cjs +0 -38
- package/dist/favicons/platform/handlers/lobsters.cjs +0 -21
- package/dist/favicons/platform/handlers/mastodon.cjs +0 -40
- package/dist/favicons/platform/handlers/reddit.cjs +0 -42
- package/dist/favicons/platform/handlers/sourceforge.cjs +0 -21
- package/dist/favicons/platform/handlers/tumblr.cjs +0 -16
- package/dist/favicons/types.d.cts +0 -4
- package/dist/favicons/utils.cjs +0 -10
- package/dist/favicons.cjs +0 -12
- package/dist/favicons.d.cts +0 -4
- package/dist/feeds/defaults.cjs +0 -178
- package/dist/feeds/defaults.d.cts +0 -20
- package/dist/feeds/extractors.cjs +0 -46
- package/dist/feeds/extractors.d.cts +0 -7
- package/dist/feeds/index.cjs +0 -26
- package/dist/feeds/index.d.cts +0 -7
- package/dist/feeds/platform/handlers/applePodcasts.cjs +0 -26
- package/dist/feeds/platform/handlers/behance.cjs +0 -49
- package/dist/feeds/platform/handlers/blogspot.cjs +0 -36
- package/dist/feeds/platform/handlers/bluesky.cjs +0 -20
- package/dist/feeds/platform/handlers/codeberg.cjs +0 -69
- package/dist/feeds/platform/handlers/csdn.cjs +0 -20
- package/dist/feeds/platform/handlers/dailymotion.cjs +0 -70
- package/dist/feeds/platform/handlers/deviantart.cjs +0 -66
- package/dist/feeds/platform/handlers/devto.cjs +0 -50
- package/dist/feeds/platform/handlers/douban.cjs +0 -56
- package/dist/feeds/platform/handlers/github.cjs +0 -116
- package/dist/feeds/platform/handlers/githubGist.cjs +0 -45
- package/dist/feeds/platform/handlers/gitlab.cjs +0 -80
- package/dist/feeds/platform/handlers/goodreads.cjs +0 -39
- package/dist/feeds/platform/handlers/hashnode.cjs +0 -16
- package/dist/feeds/platform/handlers/hatenablog.cjs +0 -53
- package/dist/feeds/platform/handlers/itchio.cjs +0 -88
- package/dist/feeds/platform/handlers/kickstarter.cjs +0 -22
- package/dist/feeds/platform/handlers/lemmy.cjs +0 -46
- package/dist/feeds/platform/handlers/letterboxd.cjs +0 -42
- package/dist/feeds/platform/handlers/lobsters.cjs +0 -57
- package/dist/feeds/platform/handlers/mastodon.cjs +0 -42
- package/dist/feeds/platform/handlers/medium.cjs +0 -68
- package/dist/feeds/platform/handlers/paragraph.cjs +0 -21
- package/dist/feeds/platform/handlers/pinterest.cjs +0 -44
- package/dist/feeds/platform/handlers/producthunt.cjs +0 -29
- package/dist/feeds/platform/handlers/reddit.cjs +0 -75
- package/dist/feeds/platform/handlers/soundcloud.cjs +0 -39
- package/dist/feeds/platform/handlers/sourceforge.cjs +0 -20
- package/dist/feeds/platform/handlers/stackExchange.cjs +0 -40
- package/dist/feeds/platform/handlers/steam.cjs +0 -28
- package/dist/feeds/platform/handlers/substack.cjs +0 -23
- package/dist/feeds/platform/handlers/tumblr.cjs +0 -24
- package/dist/feeds/platform/handlers/v2ex.cjs +0 -35
- package/dist/feeds/platform/handlers/vimeo.cjs +0 -69
- package/dist/feeds/platform/handlers/wordpress.cjs +0 -64
- package/dist/feeds/platform/handlers/wpengine.cjs +0 -10
- package/dist/feeds/platform/handlers/ximalaya.cjs +0 -20
- package/dist/feeds/platform/handlers/youtube.cjs +0 -94
- package/dist/feeds/types.d.cts +0 -9
- package/dist/feeds.cjs +0 -15
- package/dist/feeds.d.cts +0 -4
- package/dist/hubs/discover/index.cjs +0 -30
- package/dist/hubs/discover/index.d.cts +0 -7
- package/dist/hubs/discover/types.d.cts +0 -15
- package/dist/hubs/feed/index.cjs +0 -32
- package/dist/hubs/headers/index.cjs +0 -17
- package/dist/hubs/html/index.cjs +0 -28
- package/dist/hubs.cjs +0 -0
- package/dist/hubs.d.cts +0 -2
- package/dist/index.cjs +0 -13
- package/dist/index.d.cts +0 -8
- package/dist/methods.cjs +0 -15
- package/dist/methods.d.cts +0 -7
- package/dist/utils.cjs +0 -9
- package/dist/utils.d.cts +0 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { FeedMethodData } from "../uris/feed/types.js";
|
|
3
2
|
//#region src/common/discover/utils.d.ts
|
|
4
|
-
declare const getFeedSiteUrl: (parsed:
|
|
3
|
+
declare const getFeedSiteUrl: (parsed: FeedMethodData) => string | undefined;
|
|
5
4
|
//#endregion
|
|
6
5
|
export { getFeedSiteUrl };
|
|
@@ -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 };
|
package/dist/feeds/extractors.js
CHANGED
|
@@ -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 {
|
package/package.json
CHANGED
|
@@ -26,74 +26,32 @@
|
|
|
26
26
|
"type": "module",
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
"default": "./dist/index.js"
|
|
32
|
-
},
|
|
33
|
-
"require": {
|
|
34
|
-
"types": "./dist/index.d.cts",
|
|
35
|
-
"default": "./dist/index.cjs"
|
|
36
|
-
}
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"default": "./dist/index.js"
|
|
37
31
|
},
|
|
38
32
|
"./feeds": {
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
"default": "./dist/feeds.js"
|
|
42
|
-
},
|
|
43
|
-
"require": {
|
|
44
|
-
"types": "./dist/feeds.d.cts",
|
|
45
|
-
"default": "./dist/feeds.cjs"
|
|
46
|
-
}
|
|
33
|
+
"types": "./dist/feeds.d.ts",
|
|
34
|
+
"default": "./dist/feeds.js"
|
|
47
35
|
},
|
|
48
36
|
"./blogrolls": {
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
"default": "./dist/blogrolls.js"
|
|
52
|
-
},
|
|
53
|
-
"require": {
|
|
54
|
-
"types": "./dist/blogrolls.d.cts",
|
|
55
|
-
"default": "./dist/blogrolls.cjs"
|
|
56
|
-
}
|
|
37
|
+
"types": "./dist/blogrolls.d.ts",
|
|
38
|
+
"default": "./dist/blogrolls.js"
|
|
57
39
|
},
|
|
58
40
|
"./favicons": {
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"default": "./dist/favicons.js"
|
|
62
|
-
},
|
|
63
|
-
"require": {
|
|
64
|
-
"types": "./dist/favicons.d.cts",
|
|
65
|
-
"default": "./dist/favicons.cjs"
|
|
66
|
-
}
|
|
41
|
+
"types": "./dist/favicons.d.ts",
|
|
42
|
+
"default": "./dist/favicons.js"
|
|
67
43
|
},
|
|
68
44
|
"./hubs": {
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
"default": "./dist/hubs.js"
|
|
72
|
-
},
|
|
73
|
-
"require": {
|
|
74
|
-
"types": "./dist/hubs.d.cts",
|
|
75
|
-
"default": "./dist/hubs.cjs"
|
|
76
|
-
}
|
|
45
|
+
"types": "./dist/hubs.d.ts",
|
|
46
|
+
"default": "./dist/hubs.js"
|
|
77
47
|
},
|
|
78
48
|
"./methods": {
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
"default": "./dist/methods.js"
|
|
82
|
-
},
|
|
83
|
-
"require": {
|
|
84
|
-
"types": "./dist/methods.d.cts",
|
|
85
|
-
"default": "./dist/methods.cjs"
|
|
86
|
-
}
|
|
49
|
+
"types": "./dist/methods.d.ts",
|
|
50
|
+
"default": "./dist/methods.js"
|
|
87
51
|
},
|
|
88
52
|
"./utils": {
|
|
89
|
-
"
|
|
90
|
-
|
|
91
|
-
"default": "./dist/utils.js"
|
|
92
|
-
},
|
|
93
|
-
"require": {
|
|
94
|
-
"types": "./dist/utils.d.cts",
|
|
95
|
-
"default": "./dist/utils.cjs"
|
|
96
|
-
}
|
|
53
|
+
"types": "./dist/utils.d.ts",
|
|
54
|
+
"default": "./dist/utils.js"
|
|
97
55
|
},
|
|
98
56
|
"./package.json": "./package.json"
|
|
99
57
|
},
|
|
@@ -102,20 +60,22 @@
|
|
|
102
60
|
],
|
|
103
61
|
"scripts": {
|
|
104
62
|
"prepare": "lefthook install",
|
|
105
|
-
"build": "tsdown src/exports/index.ts src/exports/feeds.ts src/exports/blogrolls.ts src/exports/favicons.ts src/exports/hubs.ts src/exports/methods.ts src/exports/utils.ts --format
|
|
63
|
+
"build": "tsdown src/exports/index.ts src/exports/feeds.ts src/exports/blogrolls.ts src/exports/favicons.ts src/exports/hubs.ts src/exports/methods.ts src/exports/utils.ts --format esm --dts --clean --unbundle --no-fixed-extension",
|
|
106
64
|
"docs:dev": "vitepress dev docs",
|
|
107
65
|
"docs:build": "vitepress build docs"
|
|
108
66
|
},
|
|
109
67
|
"dependencies": {
|
|
110
|
-
"
|
|
111
|
-
|
|
112
|
-
|
|
68
|
+
"htmlparser2": "^12.0.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependencies": {
|
|
71
|
+
"feedsmith": "^3.0.0-beta.4"
|
|
113
72
|
},
|
|
114
73
|
"devDependencies": {
|
|
115
|
-
"@types/bun": "^1.3.
|
|
116
|
-
"
|
|
117
|
-
"
|
|
74
|
+
"@types/bun": "^1.3.13",
|
|
75
|
+
"feedsmith": "^3.0.0-next.4",
|
|
76
|
+
"kvalita": "^1.13.0",
|
|
77
|
+
"tsdown": "^0.21.10",
|
|
118
78
|
"vitepress": "^2.0.0-alpha.17"
|
|
119
79
|
},
|
|
120
|
-
"version": "
|
|
80
|
+
"version": "2.0.0-next.2"
|
|
121
81
|
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
//#region src/blogrolls/defaults.ts
|
|
2
|
-
const mimeTypes = [
|
|
3
|
-
"text/x-opml",
|
|
4
|
-
"application/xml",
|
|
5
|
-
"text/xml"
|
|
6
|
-
];
|
|
7
|
-
const urisMinimal = [
|
|
8
|
-
"/.well-known/recommendations.opml",
|
|
9
|
-
"/blogroll.opml",
|
|
10
|
-
"/opml.xml"
|
|
11
|
-
];
|
|
12
|
-
const urisBalanced = [
|
|
13
|
-
...urisMinimal,
|
|
14
|
-
"/blogroll.xml",
|
|
15
|
-
"/subscriptions.opml",
|
|
16
|
-
"/recommendations.opml"
|
|
17
|
-
];
|
|
18
|
-
const urisComprehensive = [
|
|
19
|
-
...urisBalanced,
|
|
20
|
-
"/links.opml",
|
|
21
|
-
"/feeds.opml",
|
|
22
|
-
"/subscriptions.xml"
|
|
23
|
-
];
|
|
24
|
-
const anchorLabels = [
|
|
25
|
-
"blogroll",
|
|
26
|
-
"opml",
|
|
27
|
-
"subscriptions",
|
|
28
|
-
"reading list"
|
|
29
|
-
];
|
|
30
|
-
const linkSelectors = [{ rel: "blogroll" }, {
|
|
31
|
-
rel: "outline",
|
|
32
|
-
types: mimeTypes
|
|
33
|
-
}];
|
|
34
|
-
const defaultHtmlOptions = {
|
|
35
|
-
linkSelectors,
|
|
36
|
-
anchorUris: urisComprehensive,
|
|
37
|
-
anchorIgnoredUris: [],
|
|
38
|
-
anchorLabels
|
|
39
|
-
};
|
|
40
|
-
const defaultHeadersOptions = { linkSelectors };
|
|
41
|
-
const defaultGuessOptions = { uris: urisBalanced };
|
|
42
|
-
//#endregion
|
|
43
|
-
exports.anchorLabels = anchorLabels;
|
|
44
|
-
exports.defaultGuessOptions = defaultGuessOptions;
|
|
45
|
-
exports.defaultHeadersOptions = defaultHeadersOptions;
|
|
46
|
-
exports.defaultHtmlOptions = defaultHtmlOptions;
|
|
47
|
-
exports.linkSelectors = linkSelectors;
|
|
48
|
-
exports.mimeTypes = mimeTypes;
|
|
49
|
-
exports.urisBalanced = urisBalanced;
|
|
50
|
-
exports.urisComprehensive = urisComprehensive;
|
|
51
|
-
exports.urisMinimal = urisMinimal;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { GuessMethodOptions } from "../common/uris/guess/types.cjs";
|
|
2
|
-
import { HeadersMethodOptions } from "../common/uris/headers/types.cjs";
|
|
3
|
-
import { HtmlMethodOptions } from "../common/uris/html/types.cjs";
|
|
4
|
-
import { LinkSelector } from "../common/types.cjs";
|
|
5
|
-
|
|
6
|
-
//#region src/blogrolls/defaults.d.ts
|
|
7
|
-
declare const mimeTypes: string[];
|
|
8
|
-
declare const urisMinimal: string[];
|
|
9
|
-
declare const urisBalanced: string[];
|
|
10
|
-
declare const urisComprehensive: string[];
|
|
11
|
-
declare const anchorLabels: string[];
|
|
12
|
-
declare const linkSelectors: Array<LinkSelector>;
|
|
13
|
-
declare const defaultHtmlOptions: Omit<HtmlMethodOptions, 'baseUrl'>;
|
|
14
|
-
declare const defaultHeadersOptions: Omit<HeadersMethodOptions, 'baseUrl'>;
|
|
15
|
-
declare const defaultGuessOptions: Omit<GuessMethodOptions, 'baseUrl'>;
|
|
16
|
-
//#endregion
|
|
17
|
-
export { anchorLabels, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
let feedsmith = require("feedsmith");
|
|
2
|
-
//#region src/blogrolls/extractors.ts
|
|
3
|
-
const defaultExtractFn = ({ content, url }) => {
|
|
4
|
-
if (!content) return {
|
|
5
|
-
url,
|
|
6
|
-
isValid: false
|
|
7
|
-
};
|
|
8
|
-
try {
|
|
9
|
-
return {
|
|
10
|
-
url,
|
|
11
|
-
isValid: true,
|
|
12
|
-
title: (0, feedsmith.parseOpml)(content).head?.title
|
|
13
|
-
};
|
|
14
|
-
} catch {}
|
|
15
|
-
return {
|
|
16
|
-
url,
|
|
17
|
-
isValid: false
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
//#endregion
|
|
21
|
-
exports.defaultExtractFn = defaultExtractFn;
|
package/dist/blogrolls/index.cjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const require_defaults = require("../common/discover/defaults.cjs");
|
|
2
|
-
const require_index = require("../common/discover/index.cjs");
|
|
3
|
-
const require_defaults$1 = require("./defaults.cjs");
|
|
4
|
-
const require_extractors = require("./extractors.cjs");
|
|
5
|
-
//#region src/blogrolls/index.ts
|
|
6
|
-
const discoverBlogrolls = (input, options = {}) => {
|
|
7
|
-
return require_index.discover(input, {
|
|
8
|
-
...options,
|
|
9
|
-
methods: options.methods ?? [
|
|
10
|
-
"html",
|
|
11
|
-
"headers",
|
|
12
|
-
"guess"
|
|
13
|
-
],
|
|
14
|
-
fetchFn: options.fetchFn ?? require_defaults.defaultFetchFn,
|
|
15
|
-
extractFn: options.extractFn ?? require_extractors.defaultExtractFn,
|
|
16
|
-
resolveUrlFn: options.resolveUrlFn ?? require_defaults.defaultResolveUrlFn,
|
|
17
|
-
resolveSiteUrlFn: options.resolveSiteUrlFn ?? require_defaults.defaultResolveSiteUrlFn
|
|
18
|
-
}, {
|
|
19
|
-
html: require_defaults$1.defaultHtmlOptions,
|
|
20
|
-
headers: require_defaults$1.defaultHeadersOptions,
|
|
21
|
-
guess: require_defaults$1.defaultGuessOptions
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
//#endregion
|
|
25
|
-
exports.discoverBlogrolls = discoverBlogrolls;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { DiscoverInput, DiscoverOptions, DiscoverResult } from "../common/types.cjs";
|
|
2
|
-
import { BlogrollResult } from "./types.cjs";
|
|
3
|
-
|
|
4
|
-
//#region src/blogrolls/index.d.ts
|
|
5
|
-
declare const discoverBlogrolls: <TValid extends BlogrollResult = BlogrollResult>(input: DiscoverInput, options?: DiscoverOptions<TValid, "html" | "headers" | "guess">) => Promise<Array<DiscoverResult<TValid>>>;
|
|
6
|
-
//#endregion
|
|
7
|
-
export { discoverBlogrolls };
|
package/dist/blogrolls.cjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_defaults = require("./blogrolls/defaults.cjs");
|
|
3
|
-
const require_extractors = require("./blogrolls/extractors.cjs");
|
|
4
|
-
exports.anchorLabels = require_defaults.anchorLabels;
|
|
5
|
-
exports.defaultExtractFn = require_extractors.defaultExtractFn;
|
|
6
|
-
exports.defaultGuessOptions = require_defaults.defaultGuessOptions;
|
|
7
|
-
exports.defaultHeadersOptions = require_defaults.defaultHeadersOptions;
|
|
8
|
-
exports.defaultHtmlOptions = require_defaults.defaultHtmlOptions;
|
|
9
|
-
exports.linkSelectors = require_defaults.linkSelectors;
|
|
10
|
-
exports.mimeTypes = require_defaults.mimeTypes;
|
|
11
|
-
exports.urisBalanced = require_defaults.urisBalanced;
|
|
12
|
-
exports.urisComprehensive = require_defaults.urisComprehensive;
|
|
13
|
-
exports.urisMinimal = require_defaults.urisMinimal;
|
package/dist/blogrolls.d.cts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { anchorLabels, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal } from "./blogrolls/defaults.cjs";
|
|
2
|
-
import { BlogrollResult } from "./blogrolls/types.cjs";
|
|
3
|
-
import { defaultExtractFn } from "./blogrolls/extractors.cjs";
|
|
4
|
-
export { BlogrollResult, anchorLabels, defaultExtractFn, defaultGuessOptions, defaultHeadersOptions, defaultHtmlOptions, linkSelectors, mimeTypes, urisBalanced, urisComprehensive, urisMinimal };
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
const require_utils = require("./utils.cjs");
|
|
2
|
-
let feedsmith = require("feedsmith");
|
|
3
|
-
//#region src/common/discover/defaults.ts
|
|
4
|
-
const defaultFetchFn = async (url, options) => {
|
|
5
|
-
const response = await fetch(url, {
|
|
6
|
-
method: options?.method ?? "GET",
|
|
7
|
-
headers: options?.headers
|
|
8
|
-
});
|
|
9
|
-
return {
|
|
10
|
-
headers: response.headers,
|
|
11
|
-
body: await response.text(),
|
|
12
|
-
url: response.url,
|
|
13
|
-
status: response.status,
|
|
14
|
-
statusText: response.statusText
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
const defaultResolveUrlFn = (url, baseUrl) => {
|
|
18
|
-
try {
|
|
19
|
-
return new URL(url, baseUrl).href;
|
|
20
|
-
} catch {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const defaultResolveSiteUrlFn = (input, resolveUrlFn) => {
|
|
25
|
-
if (!input.content) return;
|
|
26
|
-
try {
|
|
27
|
-
let siteUrl = require_utils.getFeedSiteUrl((0, feedsmith.parseFeed)(input.content));
|
|
28
|
-
if (siteUrl) {
|
|
29
|
-
siteUrl = resolveUrlFn(siteUrl, input.url);
|
|
30
|
-
if (siteUrl) {
|
|
31
|
-
const parsed = new URL(siteUrl);
|
|
32
|
-
parsed.hash = "";
|
|
33
|
-
siteUrl = parsed.href;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (!siteUrl || siteUrl === new URL(input.url).href) try {
|
|
37
|
-
siteUrl = new URL(input.url).origin;
|
|
38
|
-
} catch {}
|
|
39
|
-
if (siteUrl && new URL(siteUrl).href === new URL(input.url).href) return;
|
|
40
|
-
return siteUrl;
|
|
41
|
-
} catch {}
|
|
42
|
-
};
|
|
43
|
-
//#endregion
|
|
44
|
-
exports.defaultFetchFn = defaultFetchFn;
|
|
45
|
-
exports.defaultResolveSiteUrlFn = defaultResolveSiteUrlFn;
|
|
46
|
-
exports.defaultResolveUrlFn = defaultResolveUrlFn;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
const require_utils = require("./utils.cjs");
|
|
2
|
-
const require_types = require("../types.cjs");
|
|
3
|
-
const require_utils$1 = require("../utils.cjs");
|
|
4
|
-
const require_index = require("../uris/index.cjs");
|
|
5
|
-
//#region src/common/discover/index.ts
|
|
6
|
-
const discover = async (input, options, defaults) => {
|
|
7
|
-
const { methods, fetchFn, extractFn, resolveUrlFn, resolveSiteUrlFn, stopOnFirstMethod = false, stopOnFirstResult = false, concurrency = 3, includeInvalid = false, onProgress } = options;
|
|
8
|
-
const sourceInput = await require_utils.normalizeInput(input, fetchFn);
|
|
9
|
-
if (sourceInput.content) {
|
|
10
|
-
const result = await extractFn({
|
|
11
|
-
url: sourceInput.url,
|
|
12
|
-
content: sourceInput.content,
|
|
13
|
-
headers: sourceInput.headers
|
|
14
|
-
});
|
|
15
|
-
if (result.isValid) return [result];
|
|
16
|
-
}
|
|
17
|
-
let siteInput;
|
|
18
|
-
if (resolveSiteUrlFn) {
|
|
19
|
-
const siteUrl = resolveSiteUrlFn(sourceInput, resolveUrlFn);
|
|
20
|
-
if (siteUrl) try {
|
|
21
|
-
const response = await fetchFn(siteUrl);
|
|
22
|
-
siteInput = {
|
|
23
|
-
url: response.url,
|
|
24
|
-
content: typeof response.body === "string" ? response.body : "",
|
|
25
|
-
headers: response.headers
|
|
26
|
-
};
|
|
27
|
-
} catch {}
|
|
28
|
-
}
|
|
29
|
-
const urisByMethod = await require_index.discoverUris(require_utils.normalizeMethodsConfig(sourceInput, siteInput, methods, defaults), fetchFn);
|
|
30
|
-
const seen = /* @__PURE__ */ new Set();
|
|
31
|
-
const methodGroups = [];
|
|
32
|
-
for (const method of require_types.discoverMethodOrder) {
|
|
33
|
-
const rawUris = urisByMethod[method];
|
|
34
|
-
if (!rawUris || rawUris.length === 0) continue;
|
|
35
|
-
const unique = rawUris.map((entry) => {
|
|
36
|
-
return require_utils.normalizeUriEntry(entry, resolveUrlFn, sourceInput.url);
|
|
37
|
-
}).filter((entry) => {
|
|
38
|
-
const key = typeof entry.uri === "string" ? entry.uri : entry.uri.join("\0");
|
|
39
|
-
if (seen.has(key)) return false;
|
|
40
|
-
seen.add(key);
|
|
41
|
-
return true;
|
|
42
|
-
});
|
|
43
|
-
if (unique.length > 0) methodGroups.push({
|
|
44
|
-
method,
|
|
45
|
-
entries: unique
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
const total = methodGroups.reduce((sum, group) => sum + group.entries.length, 0);
|
|
49
|
-
const results = [];
|
|
50
|
-
let tested = 0;
|
|
51
|
-
let found = 0;
|
|
52
|
-
const fetchAndExtract = async (url) => {
|
|
53
|
-
try {
|
|
54
|
-
const fetchResult = await fetchFn(url);
|
|
55
|
-
return await extractFn({
|
|
56
|
-
url: fetchResult.url,
|
|
57
|
-
content: typeof fetchResult.body === "string" ? fetchResult.body : "",
|
|
58
|
-
headers: fetchResult.headers,
|
|
59
|
-
status: fetchResult.status
|
|
60
|
-
});
|
|
61
|
-
} catch (error) {
|
|
62
|
-
return {
|
|
63
|
-
url,
|
|
64
|
-
isValid: false,
|
|
65
|
-
error
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
const processUri = async (entry, method) => {
|
|
70
|
-
const alternatives = typeof entry.uri === "string" ? [entry.uri] : entry.uri;
|
|
71
|
-
for (const url of alternatives) {
|
|
72
|
-
const result = await fetchAndExtract(url);
|
|
73
|
-
results.push(entry.hint ? {
|
|
74
|
-
...result,
|
|
75
|
-
method,
|
|
76
|
-
hint: entry.hint
|
|
77
|
-
} : {
|
|
78
|
-
...result,
|
|
79
|
-
method
|
|
80
|
-
});
|
|
81
|
-
tested += 1;
|
|
82
|
-
if (result.isValid) found += 1;
|
|
83
|
-
onProgress?.({
|
|
84
|
-
tested,
|
|
85
|
-
total,
|
|
86
|
-
found,
|
|
87
|
-
current: url
|
|
88
|
-
});
|
|
89
|
-
if (result.isValid) break;
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
for (const { method, entries } of methodGroups) {
|
|
93
|
-
const foundBefore = found;
|
|
94
|
-
await require_utils$1.processConcurrently(entries, (entry) => processUri(entry, method), {
|
|
95
|
-
concurrency,
|
|
96
|
-
shouldStop: () => {
|
|
97
|
-
return stopOnFirstResult && found > 0;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
if (stopOnFirstMethod && found > foundBefore) break;
|
|
101
|
-
}
|
|
102
|
-
return includeInvalid ? results : results.filter((result) => result.isValid);
|
|
103
|
-
};
|
|
104
|
-
//#endregion
|
|
105
|
-
exports.discover = discover;
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
const require_locales = require("../locales.cjs");
|
|
2
|
-
//#region src/common/discover/utils.ts
|
|
3
|
-
const normalizeInput = async (input, fetchFn) => {
|
|
4
|
-
if (typeof input === "object") return input;
|
|
5
|
-
try {
|
|
6
|
-
const response = await fetchFn(input);
|
|
7
|
-
return {
|
|
8
|
-
url: response.url,
|
|
9
|
-
content: typeof response.body === "string" ? response.body : void 0,
|
|
10
|
-
headers: response.headers
|
|
11
|
-
};
|
|
12
|
-
} catch {}
|
|
13
|
-
return { url: input };
|
|
14
|
-
};
|
|
15
|
-
const getLinkOfType = (links, rel) => {
|
|
16
|
-
return links?.find((link) => link.rel === rel);
|
|
17
|
-
};
|
|
18
|
-
const getFeedSiteUrl = (parsed) => {
|
|
19
|
-
const { format, feed } = parsed;
|
|
20
|
-
if (format === "rss" || format === "rdf") return getLinkOfType(feed.atom?.links, "alternate")?.href ?? feed.link;
|
|
21
|
-
if (format === "atom") return getLinkOfType(feed.links, "alternate")?.href;
|
|
22
|
-
if (format === "json") return feed.home_page_url;
|
|
23
|
-
};
|
|
24
|
-
const normalizeUriEntry = (entry, resolveUrlFn, baseUrl) => {
|
|
25
|
-
if (typeof entry.uri === "string") return {
|
|
26
|
-
...entry,
|
|
27
|
-
uri: resolveUrlFn(entry.uri, baseUrl) ?? entry.uri
|
|
28
|
-
};
|
|
29
|
-
return {
|
|
30
|
-
...entry,
|
|
31
|
-
uri: entry.uri.map((uri) => resolveUrlFn(uri, baseUrl) ?? uri)
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
const normalizeMethodsConfig = (sourceInput, siteInput, methods, defaults) => {
|
|
35
|
-
const resolvedInput = siteInput ?? sourceInput;
|
|
36
|
-
const methodsObj = Array.isArray(methods) ? Object.fromEntries(methods.map((method) => [method, true])) : methods;
|
|
37
|
-
const methodsConfig = {};
|
|
38
|
-
if (methodsObj.platform && defaults.platform) {
|
|
39
|
-
if (!resolvedInput.url || resolvedInput.url === "") throw new Error(require_locales.errors.platformMethodRequiresUrl);
|
|
40
|
-
const platformOptions = methodsObj.platform === true ? {} : methodsObj.platform;
|
|
41
|
-
methodsConfig.platform = {
|
|
42
|
-
content: resolvedInput.content,
|
|
43
|
-
headers: resolvedInput.headers,
|
|
44
|
-
options: {
|
|
45
|
-
...defaults.platform,
|
|
46
|
-
...platformOptions,
|
|
47
|
-
baseUrl: resolvedInput.url
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
if (methodsObj.feed && defaults.feed) {
|
|
52
|
-
if (sourceInput.content === void 0) throw new Error(require_locales.errors.feedMethodRequiresContent);
|
|
53
|
-
const feedOptions = methodsObj.feed === true ? {} : methodsObj.feed;
|
|
54
|
-
methodsConfig.feed = {
|
|
55
|
-
content: sourceInput.content,
|
|
56
|
-
options: {
|
|
57
|
-
...defaults.feed,
|
|
58
|
-
...feedOptions
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (methodsObj.html && defaults.html) {
|
|
63
|
-
if (resolvedInput.content === void 0) throw new Error(require_locales.errors.htmlMethodRequiresContent);
|
|
64
|
-
const htmlOptions = methodsObj.html === true ? {} : methodsObj.html;
|
|
65
|
-
methodsConfig.html = {
|
|
66
|
-
html: resolvedInput.content,
|
|
67
|
-
options: {
|
|
68
|
-
...defaults.html,
|
|
69
|
-
...htmlOptions,
|
|
70
|
-
baseUrl: resolvedInput.url
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
if (methodsObj.headers && defaults.headers) {
|
|
75
|
-
if (resolvedInput.headers === void 0) throw new Error(require_locales.errors.headersMethodRequiresHeaders);
|
|
76
|
-
const headersOptions = methodsObj.headers === true ? {} : methodsObj.headers;
|
|
77
|
-
methodsConfig.headers = {
|
|
78
|
-
headers: resolvedInput.headers,
|
|
79
|
-
options: {
|
|
80
|
-
...defaults.headers,
|
|
81
|
-
...headersOptions,
|
|
82
|
-
baseUrl: resolvedInput.url
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
if (methodsObj.guess && defaults.guess) {
|
|
87
|
-
if (!resolvedInput.url || resolvedInput.url === "") throw new Error(require_locales.errors.guessMethodRequiresUrl);
|
|
88
|
-
const guessOptions = methodsObj.guess === true ? {} : methodsObj.guess;
|
|
89
|
-
methodsConfig.guess = { options: {
|
|
90
|
-
...defaults.guess,
|
|
91
|
-
...guessOptions,
|
|
92
|
-
baseUrl: resolvedInput.url
|
|
93
|
-
} };
|
|
94
|
-
}
|
|
95
|
-
return methodsConfig;
|
|
96
|
-
};
|
|
97
|
-
//#endregion
|
|
98
|
-
exports.getFeedSiteUrl = getFeedSiteUrl;
|
|
99
|
-
exports.normalizeInput = normalizeInput;
|
|
100
|
-
exports.normalizeMethodsConfig = normalizeMethodsConfig;
|
|
101
|
-
exports.normalizeUriEntry = normalizeUriEntry;
|