webring 1.3.4 → 1.4.0
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/CHANGELOG.md +93 -0
- package/bun.lock +964 -0
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +5 -8
- package/dist/fetch.js.map +1 -1
- package/dist/types.d.ts +3 -21
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -22
- package/src/fetch.ts +5 -11
package/dist/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhG,wBAAsB,QAAQ,CAAC,MAAM,EAAE,aAAa;;;;;;;;;;KAEnD;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAgC5F"}
|
package/dist/fetch.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import Parser from "rss-parser";
|
|
2
2
|
import sanitizeHtml from "sanitize-html";
|
|
3
|
-
import
|
|
3
|
+
import * as truncateHtml from "truncate-html";
|
|
4
4
|
import { FeedEntrySchema } from "./types.js";
|
|
5
5
|
import * as R from "remeda";
|
|
6
6
|
import { asyncMapFilterUndefined } from "./util.js";
|
|
7
|
-
//
|
|
8
|
-
|
|
7
|
+
// Handle ESM/CommonJS interop - truncate-html exports differently in different environments
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
9
|
+
const truncate = truncateHtml.default ?? truncateHtml;
|
|
9
10
|
export async function fetchAll(config) {
|
|
10
11
|
return await asyncMapFilterUndefined(config.sources, (source) => fetch(source, config.truncate));
|
|
11
12
|
}
|
|
@@ -23,11 +24,7 @@ export async function fetch(source, length) {
|
|
|
23
24
|
url: firstItem.link,
|
|
24
25
|
date: new Date(firstItem.date),
|
|
25
26
|
source,
|
|
26
|
-
preview: preview
|
|
27
|
-
? truncateFn(sanitizeHtml(preview, {
|
|
28
|
-
parseStyleAttributes: false,
|
|
29
|
-
}), length)
|
|
30
|
-
: undefined,
|
|
27
|
+
preview: preview ? truncate(sanitizeHtml(preview, { parseStyleAttributes: false }), length) : undefined,
|
|
31
28
|
};
|
|
32
29
|
}
|
|
33
30
|
catch (e) {
|
package/dist/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAC;AAChC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,YAAY,CAAC;AAChC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAiC,eAAe,EAAsB,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD,4FAA4F;AAC5F,mJAAmJ;AACnJ,MAAM,QAAQ,GAA+C,YAAoB,CAAC,OAAO,IAAI,YAAY,CAAC;AAE1G,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAqB;IAClD,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,MAAc,EAAE,MAAc;IACxD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CACtB,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAC5C,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EACjD,CAAC,CAAC,OAAO,EAAE,EACX,CAAC,CAAC,KAAK,EAAE,CACV,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GACX,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEzG,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,GAAG,EAAE,SAAS,CAAC,IAAI;YACnB,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC9B,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACxG,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,GAAG,KAAK,CAAW,EAAE,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -99,8 +99,7 @@ declare const ConfigurationSchema: z.ZodObject<{
|
|
|
99
99
|
}>;
|
|
100
100
|
export type CachedConfiguration = z.infer<typeof CachedConfigurationSchema>;
|
|
101
101
|
/** A configuration object with caching definitely configured */
|
|
102
|
-
export declare const CachedConfigurationSchema: z.ZodObject<
|
|
103
|
-
/** A list of sources to fetch */
|
|
102
|
+
export declare const CachedConfigurationSchema: z.ZodObject<{
|
|
104
103
|
sources: z.ZodArray<z.ZodObject<{
|
|
105
104
|
/** The URL of an RSS feed */
|
|
106
105
|
url: z.ZodString;
|
|
@@ -117,27 +116,10 @@ export declare const CachedConfigurationSchema: z.ZodObject<z.objectUtil.extendS
|
|
|
117
116
|
title: string;
|
|
118
117
|
filter?: ((args_0: string, ...args: unknown[]) => boolean) | undefined;
|
|
119
118
|
}>, "many">;
|
|
120
|
-
/** Return the n latest updates from the source list. */
|
|
121
119
|
number: z.ZodDefault<z.ZodNumber>;
|
|
122
|
-
/** How many words the preview field should be truncated to in characters after HTML has been sanitized and parsed. */
|
|
123
120
|
truncate: z.ZodDefault<z.ZodNumber>;
|
|
124
|
-
/** Configuration for the cache */
|
|
125
|
-
cache: z.ZodOptional<z.ZodObject<{
|
|
126
|
-
/** How long to cache a result for */
|
|
127
|
-
cache_duration_minutes: z.ZodDefault<z.ZodNumber>;
|
|
128
|
-
/** The location of a file to use as a cache */
|
|
129
|
-
cache_file: z.ZodDefault<z.ZodString>;
|
|
130
|
-
}, "strip", z.ZodTypeAny, {
|
|
131
|
-
cache_duration_minutes: number;
|
|
132
|
-
cache_file: string;
|
|
133
|
-
}, {
|
|
134
|
-
cache_duration_minutes?: number | undefined;
|
|
135
|
-
cache_file?: string | undefined;
|
|
136
|
-
}>>;
|
|
137
|
-
/** Randomize the output order */
|
|
138
121
|
shuffle: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
139
|
-
}
|
|
140
|
-
/** Configuration for the cache */
|
|
122
|
+
} & {
|
|
141
123
|
cache: z.ZodObject<{
|
|
142
124
|
/** How long to cache a result for */
|
|
143
125
|
cache_duration_minutes: z.ZodDefault<z.ZodNumber>;
|
|
@@ -150,7 +132,7 @@ export declare const CachedConfigurationSchema: z.ZodObject<z.objectUtil.extendS
|
|
|
150
132
|
cache_duration_minutes?: number | undefined;
|
|
151
133
|
cache_file?: string | undefined;
|
|
152
134
|
}>;
|
|
153
|
-
}
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
154
136
|
number: number;
|
|
155
137
|
sources: {
|
|
156
138
|
url: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAClD,oBAAoB;AACpB,QAAA,MAAM,YAAY;IAChB,6BAA6B;;IAE7B,mCAAmC;;IAEnC,8EAA8E;;;;;;;;;;EAE9E,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,kCAAkC;AAClC,QAAA,MAAM,wBAAwB;IAC5B,qCAAqC;;IAErC,+CAA+C;;;;;;;;EAE/C,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,8DAA8D;AAC9D,QAAA,MAAM,mBAAmB;IACvB,iCAAiC;;QApBjC,6BAA6B;;QAE7B,mCAAmC;;QAEnC,8EAA8E;;;;;;;;;;;IAkB9E,wDAAwD;;IAExD,sHAAsH;;IAEtH,kCAAkC;;QAflC,qCAAqC;;QAErC,+CAA+C;;;;;;;;;IAe/C,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEjC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,gEAAgE;AAChE,eAAO,MAAM,yBAAyB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,45 +16,45 @@
|
|
|
16
16
|
"url": "https://github.com/shepherdjerred/webring/issues"
|
|
17
17
|
},
|
|
18
18
|
"type": "module",
|
|
19
|
-
"version": "1.
|
|
19
|
+
"version": "1.4.0",
|
|
20
20
|
"scripts": {
|
|
21
21
|
"prepare": "husky",
|
|
22
22
|
"lint": "eslint src --cache",
|
|
23
23
|
"build": "tsc",
|
|
24
24
|
"watch": "tsc -w",
|
|
25
25
|
"test": "vitest --disable-console-intercept",
|
|
26
|
+
"test:update": "vitest --disable-console-intercept --update",
|
|
26
27
|
"typedoc": "typedoc src/index.ts"
|
|
27
28
|
},
|
|
28
29
|
"main": "dist/index.js",
|
|
29
30
|
"types": "dist/index.d.ts",
|
|
30
31
|
"dependencies": {
|
|
31
|
-
"remeda": "^2.
|
|
32
|
+
"remeda": "^2.21.2",
|
|
32
33
|
"rss-parser": "^3.13.0",
|
|
33
|
-
"sanitize-html": "^2.
|
|
34
|
-
"truncate-html": "^1.
|
|
35
|
-
"zod": "^3.24.
|
|
34
|
+
"sanitize-html": "^2.14.0",
|
|
35
|
+
"truncate-html": "^1.2.0",
|
|
36
|
+
"zod": "^3.24.2"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
38
|
-
"@commitlint/cli": "^
|
|
39
|
-
"@commitlint/config-conventional": "^
|
|
40
|
-
"@eslint/js": "^9.
|
|
41
|
-
"@tsconfig/
|
|
39
|
+
"@commitlint/cli": "^20.0.0",
|
|
40
|
+
"@commitlint/config-conventional": "^20.0.0",
|
|
41
|
+
"@eslint/js": "^9.22.0",
|
|
42
|
+
"@tsconfig/node22": "^22.0.0",
|
|
42
43
|
"@tsconfig/strictest": "^2.0.5",
|
|
43
|
-
"@types/eslint__js": "^8.42.3",
|
|
44
44
|
"@types/express": "^5.0.0",
|
|
45
|
-
"@types/node": "^
|
|
45
|
+
"@types/node": "^25.0.0",
|
|
46
46
|
"@types/sanitize-html": "^2.13.0",
|
|
47
|
-
"eslint": "^9.
|
|
48
|
-
"express": "^
|
|
49
|
-
"globals": "^
|
|
47
|
+
"eslint": "^9.22.0",
|
|
48
|
+
"express": "^5.0.0",
|
|
49
|
+
"globals": "^17.0.0",
|
|
50
50
|
"husky": "^9.1.7",
|
|
51
|
-
"lint-staged": "^
|
|
52
|
-
"prettier": "^3.
|
|
53
|
-
"typedoc": "^0.
|
|
54
|
-
"typedoc-plugin-zod": "^1.
|
|
55
|
-
"typescript": "^5.
|
|
56
|
-
"typescript-eslint": "^8.
|
|
57
|
-
"vitest": "^
|
|
51
|
+
"lint-staged": "^16.0.0",
|
|
52
|
+
"prettier": "^3.5.3",
|
|
53
|
+
"typedoc": "^0.28.0",
|
|
54
|
+
"typedoc-plugin-zod": "^1.4.0",
|
|
55
|
+
"typescript": "^5.8.2",
|
|
56
|
+
"typescript-eslint": "^8.26.1",
|
|
57
|
+
"vitest": "^3.0.8"
|
|
58
58
|
},
|
|
59
59
|
"lint-staged": {
|
|
60
60
|
"*.{ts,tsx}": "eslint --cache --fix",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"package.json",
|
|
75
75
|
"README.md",
|
|
76
76
|
"LICENSE",
|
|
77
|
-
"
|
|
77
|
+
"bun.lock",
|
|
78
78
|
"CHANGELOG.md"
|
|
79
79
|
]
|
|
80
80
|
}
|
package/src/fetch.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import Parser from "rss-parser";
|
|
2
2
|
import sanitizeHtml from "sanitize-html";
|
|
3
|
-
import
|
|
3
|
+
import * as truncateHtml from "truncate-html";
|
|
4
4
|
import { type Source, type ResultEntry, FeedEntrySchema, type Configuration } from "./types.js";
|
|
5
5
|
import * as R from "remeda";
|
|
6
6
|
import { asyncMapFilterUndefined } from "./util.js";
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
|
|
8
|
+
// Handle ESM/CommonJS interop - truncate-html exports differently in different environments
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
10
|
+
const truncate: (html: string, length?: number) => string = (truncateHtml as any).default ?? truncateHtml;
|
|
10
11
|
|
|
11
12
|
export async function fetchAll(config: Configuration) {
|
|
12
13
|
return await asyncMapFilterUndefined(config.sources, (source) => fetch(source, config.truncate));
|
|
@@ -38,14 +39,7 @@ export async function fetch(source: Source, length: number): Promise<ResultEntry
|
|
|
38
39
|
url: firstItem.link,
|
|
39
40
|
date: new Date(firstItem.date),
|
|
40
41
|
source,
|
|
41
|
-
preview: preview
|
|
42
|
-
? truncateFn(
|
|
43
|
-
sanitizeHtml(preview, {
|
|
44
|
-
parseStyleAttributes: false,
|
|
45
|
-
}),
|
|
46
|
-
length,
|
|
47
|
-
)
|
|
48
|
-
: undefined,
|
|
42
|
+
preview: preview ? truncate(sanitizeHtml(preview, { parseStyleAttributes: false }), length) : undefined,
|
|
49
43
|
};
|
|
50
44
|
} catch (e) {
|
|
51
45
|
console.error(`Error fetching ${source.url}: ${e as string}`);
|