@nanocollective/get-md 1.0.1 → 1.0.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/README.md +0 -3
- package/dist/extractors/metadata-extractor.spec.d.ts +2 -0
- package/dist/extractors/metadata-extractor.spec.d.ts.map +1 -0
- package/dist/extractors/metadata-extractor.spec.js +486 -0
- package/dist/extractors/metadata-extractor.spec.js.map +1 -0
- package/dist/index.spec.d.ts +2 -0
- package/dist/index.spec.d.ts.map +1 -0
- package/dist/index.spec.js +518 -0
- package/dist/index.spec.js.map +1 -0
- package/dist/optimizers/html-cleaner.spec.d.ts +2 -0
- package/dist/optimizers/html-cleaner.spec.d.ts.map +1 -0
- package/dist/optimizers/html-cleaner.spec.js +351 -0
- package/dist/optimizers/html-cleaner.spec.js.map +1 -0
- package/dist/optimizers/llm-formatter.spec.d.ts +2 -0
- package/dist/optimizers/llm-formatter.spec.d.ts.map +1 -0
- package/dist/optimizers/llm-formatter.spec.js +276 -0
- package/dist/optimizers/llm-formatter.spec.js.map +1 -0
- package/dist/optimizers/structure-enhancer.spec.d.ts +2 -0
- package/dist/optimizers/structure-enhancer.spec.d.ts.map +1 -0
- package/dist/optimizers/structure-enhancer.spec.js +331 -0
- package/dist/optimizers/structure-enhancer.spec.js.map +1 -0
- package/dist/utils/url-fetcher.spec.d.ts +2 -0
- package/dist/utils/url-fetcher.spec.d.ts.map +1 -0
- package/dist/utils/url-fetcher.spec.js +206 -0
- package/dist/utils/url-fetcher.spec.js.map +1 -0
- package/dist/utils/validators.spec.d.ts +2 -0
- package/dist/utils/validators.spec.d.ts.map +1 -0
- package/dist/utils/validators.spec.js +290 -0
- package/dist/utils/validators.spec.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# get-md
|
|
2
2
|
|
|
3
|
-
> [!WARNING]
|
|
4
|
-
> This package was just released and may be unstable. Please report any issues you encounter and have caution when using in production as there may be issues and breaking changes in new versions. We're working hard to remove this warning.
|
|
5
|
-
|
|
6
3
|
A fast, lightweight HTML to Markdown converter optimized for LLM consumption. Uses proven parsing libraries to deliver clean, well-structured markdown with intelligent content extraction and noise filtering.
|
|
7
4
|
|
|
8
5
|
## Features
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-extractor.spec.d.ts","sourceRoot":"","sources":["../../src/extractors/metadata-extractor.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
// src/extractors/metadata-extractor.spec.ts
|
|
2
|
+
import test from "ava";
|
|
3
|
+
import { extractMetadata } from "./metadata-extractor.js";
|
|
4
|
+
test("extracts title from Open Graph meta tag", (t) => {
|
|
5
|
+
const html = `
|
|
6
|
+
<html>
|
|
7
|
+
<head>
|
|
8
|
+
<meta property="og:title" content="OG Title" />
|
|
9
|
+
</head>
|
|
10
|
+
</html>
|
|
11
|
+
`;
|
|
12
|
+
const metadata = extractMetadata(html);
|
|
13
|
+
t.is(metadata.title, "OG Title");
|
|
14
|
+
});
|
|
15
|
+
test("extracts title from Twitter meta tag", (t) => {
|
|
16
|
+
const html = `
|
|
17
|
+
<html>
|
|
18
|
+
<head>
|
|
19
|
+
<meta name="twitter:title" content="Twitter Title" />
|
|
20
|
+
</head>
|
|
21
|
+
</html>
|
|
22
|
+
`;
|
|
23
|
+
const metadata = extractMetadata(html);
|
|
24
|
+
t.is(metadata.title, "Twitter Title");
|
|
25
|
+
});
|
|
26
|
+
test("extracts title from title tag", (t) => {
|
|
27
|
+
const html = `
|
|
28
|
+
<html>
|
|
29
|
+
<head>
|
|
30
|
+
<title>Page Title</title>
|
|
31
|
+
</head>
|
|
32
|
+
</html>
|
|
33
|
+
`;
|
|
34
|
+
const metadata = extractMetadata(html);
|
|
35
|
+
t.is(metadata.title, "Page Title");
|
|
36
|
+
});
|
|
37
|
+
test("extracts title from h1 tag as fallback", (t) => {
|
|
38
|
+
const html = `
|
|
39
|
+
<html>
|
|
40
|
+
<body>
|
|
41
|
+
<h1>Main Heading</h1>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
44
|
+
`;
|
|
45
|
+
const metadata = extractMetadata(html);
|
|
46
|
+
t.is(metadata.title, "Main Heading");
|
|
47
|
+
});
|
|
48
|
+
test("prioritizes Open Graph title over other sources", (t) => {
|
|
49
|
+
const html = `
|
|
50
|
+
<html>
|
|
51
|
+
<head>
|
|
52
|
+
<meta property="og:title" content="OG Title" />
|
|
53
|
+
<meta name="twitter:title" content="Twitter Title" />
|
|
54
|
+
<title>Page Title</title>
|
|
55
|
+
</head>
|
|
56
|
+
<body>
|
|
57
|
+
<h1>H1 Title</h1>
|
|
58
|
+
</body>
|
|
59
|
+
</html>
|
|
60
|
+
`;
|
|
61
|
+
const metadata = extractMetadata(html);
|
|
62
|
+
t.is(metadata.title, "OG Title");
|
|
63
|
+
});
|
|
64
|
+
test("returns undefined for title when none found", (t) => {
|
|
65
|
+
const html = "<html><body><p>No title</p></body></html>";
|
|
66
|
+
const metadata = extractMetadata(html);
|
|
67
|
+
t.is(metadata.title, undefined);
|
|
68
|
+
});
|
|
69
|
+
test("extracts author from meta tag", (t) => {
|
|
70
|
+
const html = `
|
|
71
|
+
<html>
|
|
72
|
+
<head>
|
|
73
|
+
<meta name="author" content="John Doe" />
|
|
74
|
+
</head>
|
|
75
|
+
</html>
|
|
76
|
+
`;
|
|
77
|
+
const metadata = extractMetadata(html);
|
|
78
|
+
t.is(metadata.author, "John Doe");
|
|
79
|
+
});
|
|
80
|
+
test("extracts author from article:author meta tag", (t) => {
|
|
81
|
+
const html = `
|
|
82
|
+
<html>
|
|
83
|
+
<head>
|
|
84
|
+
<meta property="article:author" content="Jane Smith" />
|
|
85
|
+
</head>
|
|
86
|
+
</html>
|
|
87
|
+
`;
|
|
88
|
+
const metadata = extractMetadata(html);
|
|
89
|
+
t.is(metadata.author, "Jane Smith");
|
|
90
|
+
});
|
|
91
|
+
test("extracts author from rel=author link", (t) => {
|
|
92
|
+
const html = `
|
|
93
|
+
<html>
|
|
94
|
+
<body>
|
|
95
|
+
<a rel="author" href="/author">Bob Johnson</a>
|
|
96
|
+
</body>
|
|
97
|
+
</html>
|
|
98
|
+
`;
|
|
99
|
+
const metadata = extractMetadata(html);
|
|
100
|
+
t.is(metadata.author, "Bob Johnson");
|
|
101
|
+
});
|
|
102
|
+
test("extracts author from common class names", (t) => {
|
|
103
|
+
const html = `
|
|
104
|
+
<html>
|
|
105
|
+
<body>
|
|
106
|
+
<div class="author">Alice Williams</div>
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
109
|
+
`;
|
|
110
|
+
const metadata = extractMetadata(html);
|
|
111
|
+
t.is(metadata.author, "Alice Williams");
|
|
112
|
+
});
|
|
113
|
+
test("extracts author from byline class", (t) => {
|
|
114
|
+
const html = `
|
|
115
|
+
<html>
|
|
116
|
+
<body>
|
|
117
|
+
<div class="byline">By Tom Brown</div>
|
|
118
|
+
</body>
|
|
119
|
+
</html>
|
|
120
|
+
`;
|
|
121
|
+
const metadata = extractMetadata(html);
|
|
122
|
+
t.is(metadata.author, "By Tom Brown");
|
|
123
|
+
});
|
|
124
|
+
test("returns undefined for author when none found", (t) => {
|
|
125
|
+
const html = "<html><body><p>No author</p></body></html>";
|
|
126
|
+
const metadata = extractMetadata(html);
|
|
127
|
+
t.is(metadata.author, undefined);
|
|
128
|
+
});
|
|
129
|
+
test("extracts excerpt from Open Graph description", (t) => {
|
|
130
|
+
const html = `
|
|
131
|
+
<html>
|
|
132
|
+
<head>
|
|
133
|
+
<meta property="og:description" content="OG description text" />
|
|
134
|
+
</head>
|
|
135
|
+
</html>
|
|
136
|
+
`;
|
|
137
|
+
const metadata = extractMetadata(html);
|
|
138
|
+
t.is(metadata.excerpt, "OG description text");
|
|
139
|
+
});
|
|
140
|
+
test("extracts excerpt from meta description", (t) => {
|
|
141
|
+
const html = `
|
|
142
|
+
<html>
|
|
143
|
+
<head>
|
|
144
|
+
<meta name="description" content="Meta description text" />
|
|
145
|
+
</head>
|
|
146
|
+
</html>
|
|
147
|
+
`;
|
|
148
|
+
const metadata = extractMetadata(html);
|
|
149
|
+
t.is(metadata.excerpt, "Meta description text");
|
|
150
|
+
});
|
|
151
|
+
test("extracts excerpt from Twitter description", (t) => {
|
|
152
|
+
const html = `
|
|
153
|
+
<html>
|
|
154
|
+
<head>
|
|
155
|
+
<meta name="twitter:description" content="Twitter description" />
|
|
156
|
+
</head>
|
|
157
|
+
</html>
|
|
158
|
+
`;
|
|
159
|
+
const metadata = extractMetadata(html);
|
|
160
|
+
t.is(metadata.excerpt, "Twitter description");
|
|
161
|
+
});
|
|
162
|
+
test("prioritizes Open Graph description over others", (t) => {
|
|
163
|
+
const html = `
|
|
164
|
+
<html>
|
|
165
|
+
<head>
|
|
166
|
+
<meta property="og:description" content="OG description" />
|
|
167
|
+
<meta name="description" content="Meta description" />
|
|
168
|
+
<meta name="twitter:description" content="Twitter description" />
|
|
169
|
+
</head>
|
|
170
|
+
</html>
|
|
171
|
+
`;
|
|
172
|
+
const metadata = extractMetadata(html);
|
|
173
|
+
t.is(metadata.excerpt, "OG description");
|
|
174
|
+
});
|
|
175
|
+
test("returns undefined for excerpt when none found", (t) => {
|
|
176
|
+
const html = "<html><body><p>No description</p></body></html>";
|
|
177
|
+
const metadata = extractMetadata(html);
|
|
178
|
+
t.is(metadata.excerpt, undefined);
|
|
179
|
+
});
|
|
180
|
+
test("extracts site name from Open Graph", (t) => {
|
|
181
|
+
const html = `
|
|
182
|
+
<html>
|
|
183
|
+
<head>
|
|
184
|
+
<meta property="og:site_name" content="Example Site" />
|
|
185
|
+
</head>
|
|
186
|
+
</html>
|
|
187
|
+
`;
|
|
188
|
+
const metadata = extractMetadata(html);
|
|
189
|
+
t.is(metadata.siteName, "Example Site");
|
|
190
|
+
});
|
|
191
|
+
test("extracts site name from application-name meta tag", (t) => {
|
|
192
|
+
const html = `
|
|
193
|
+
<html>
|
|
194
|
+
<head>
|
|
195
|
+
<meta name="application-name" content="My App" />
|
|
196
|
+
</head>
|
|
197
|
+
</html>
|
|
198
|
+
`;
|
|
199
|
+
const metadata = extractMetadata(html);
|
|
200
|
+
t.is(metadata.siteName, "My App");
|
|
201
|
+
});
|
|
202
|
+
test("prioritizes Open Graph site name over application-name", (t) => {
|
|
203
|
+
const html = `
|
|
204
|
+
<html>
|
|
205
|
+
<head>
|
|
206
|
+
<meta property="og:site_name" content="OG Site" />
|
|
207
|
+
<meta name="application-name" content="App Name" />
|
|
208
|
+
</head>
|
|
209
|
+
</html>
|
|
210
|
+
`;
|
|
211
|
+
const metadata = extractMetadata(html);
|
|
212
|
+
t.is(metadata.siteName, "OG Site");
|
|
213
|
+
});
|
|
214
|
+
test("returns undefined for site name when none found", (t) => {
|
|
215
|
+
const html = "<html><body><p>No site name</p></body></html>";
|
|
216
|
+
const metadata = extractMetadata(html);
|
|
217
|
+
t.is(metadata.siteName, undefined);
|
|
218
|
+
});
|
|
219
|
+
test("extracts published time from article meta tag", (t) => {
|
|
220
|
+
const html = `
|
|
221
|
+
<html>
|
|
222
|
+
<head>
|
|
223
|
+
<meta property="article:published_time" content="2025-01-15T10:30:00Z" />
|
|
224
|
+
</head>
|
|
225
|
+
</html>
|
|
226
|
+
`;
|
|
227
|
+
const metadata = extractMetadata(html);
|
|
228
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
229
|
+
});
|
|
230
|
+
test("extracts published time from time element", (t) => {
|
|
231
|
+
const html = `
|
|
232
|
+
<html>
|
|
233
|
+
<body>
|
|
234
|
+
<time datetime="2025-01-15T10:30:00Z">January 15, 2025</time>
|
|
235
|
+
</body>
|
|
236
|
+
</html>
|
|
237
|
+
`;
|
|
238
|
+
const metadata = extractMetadata(html);
|
|
239
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
240
|
+
});
|
|
241
|
+
test("extracts published time from itemprop datePublished", (t) => {
|
|
242
|
+
const html = `
|
|
243
|
+
<html>
|
|
244
|
+
<body>
|
|
245
|
+
<meta itemprop="datePublished" content="2025-01-15T10:30:00Z" />
|
|
246
|
+
</body>
|
|
247
|
+
</html>
|
|
248
|
+
`;
|
|
249
|
+
const metadata = extractMetadata(html);
|
|
250
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
251
|
+
});
|
|
252
|
+
test("prioritizes article:published_time over other sources", (t) => {
|
|
253
|
+
const html = `
|
|
254
|
+
<html>
|
|
255
|
+
<head>
|
|
256
|
+
<meta property="article:published_time" content="2025-01-15T10:30:00Z" />
|
|
257
|
+
</head>
|
|
258
|
+
<body>
|
|
259
|
+
<time datetime="2025-01-14T10:30:00Z">January 14, 2025</time>
|
|
260
|
+
<meta itemprop="datePublished" content="2025-01-13T10:30:00Z" />
|
|
261
|
+
</body>
|
|
262
|
+
</html>
|
|
263
|
+
`;
|
|
264
|
+
const metadata = extractMetadata(html);
|
|
265
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
266
|
+
});
|
|
267
|
+
test("returns undefined for published time when none found", (t) => {
|
|
268
|
+
const html = "<html><body><p>No date</p></body></html>";
|
|
269
|
+
const metadata = extractMetadata(html);
|
|
270
|
+
t.is(metadata.publishedTime, undefined);
|
|
271
|
+
});
|
|
272
|
+
test("extracts language from html lang attribute", (t) => {
|
|
273
|
+
const html = '<html lang="en-US"><body></body></html>';
|
|
274
|
+
const metadata = extractMetadata(html);
|
|
275
|
+
t.is(metadata.language, "en-US");
|
|
276
|
+
});
|
|
277
|
+
test("extracts language from meta content-language", (t) => {
|
|
278
|
+
const html = `
|
|
279
|
+
<html>
|
|
280
|
+
<head>
|
|
281
|
+
<meta http-equiv="content-language" content="fr-FR" />
|
|
282
|
+
</head>
|
|
283
|
+
</html>
|
|
284
|
+
`;
|
|
285
|
+
const metadata = extractMetadata(html);
|
|
286
|
+
t.is(metadata.language, "fr-FR");
|
|
287
|
+
});
|
|
288
|
+
test("prioritizes html lang over meta content-language", (t) => {
|
|
289
|
+
const html = `
|
|
290
|
+
<html lang="en-US">
|
|
291
|
+
<head>
|
|
292
|
+
<meta http-equiv="content-language" content="fr-FR" />
|
|
293
|
+
</head>
|
|
294
|
+
</html>
|
|
295
|
+
`;
|
|
296
|
+
const metadata = extractMetadata(html);
|
|
297
|
+
t.is(metadata.language, "en-US");
|
|
298
|
+
});
|
|
299
|
+
test("returns undefined for language when none found", (t) => {
|
|
300
|
+
const html = "<html><body><p>No language</p></body></html>";
|
|
301
|
+
const metadata = extractMetadata(html);
|
|
302
|
+
t.is(metadata.language, undefined);
|
|
303
|
+
});
|
|
304
|
+
test("extracts canonical URL from link rel=canonical", (t) => {
|
|
305
|
+
const html = `
|
|
306
|
+
<html>
|
|
307
|
+
<head>
|
|
308
|
+
<link rel="canonical" href="https://example.com/page" />
|
|
309
|
+
</head>
|
|
310
|
+
</html>
|
|
311
|
+
`;
|
|
312
|
+
const metadata = extractMetadata(html);
|
|
313
|
+
t.is(metadata.canonicalUrl, "https://example.com/page");
|
|
314
|
+
});
|
|
315
|
+
test("extracts canonical URL from Open Graph URL", (t) => {
|
|
316
|
+
const html = `
|
|
317
|
+
<html>
|
|
318
|
+
<head>
|
|
319
|
+
<meta property="og:url" content="https://example.com/og-page" />
|
|
320
|
+
</head>
|
|
321
|
+
</html>
|
|
322
|
+
`;
|
|
323
|
+
const metadata = extractMetadata(html);
|
|
324
|
+
t.is(metadata.canonicalUrl, "https://example.com/og-page");
|
|
325
|
+
});
|
|
326
|
+
test("prioritizes link rel=canonical over Open Graph URL", (t) => {
|
|
327
|
+
const html = `
|
|
328
|
+
<html>
|
|
329
|
+
<head>
|
|
330
|
+
<link rel="canonical" href="https://example.com/canonical" />
|
|
331
|
+
<meta property="og:url" content="https://example.com/og" />
|
|
332
|
+
</head>
|
|
333
|
+
</html>
|
|
334
|
+
`;
|
|
335
|
+
const metadata = extractMetadata(html);
|
|
336
|
+
t.is(metadata.canonicalUrl, "https://example.com/canonical");
|
|
337
|
+
});
|
|
338
|
+
test("resolves relative canonical URL with baseUrl", (t) => {
|
|
339
|
+
const html = `
|
|
340
|
+
<html>
|
|
341
|
+
<head>
|
|
342
|
+
<link rel="canonical" href="/page" />
|
|
343
|
+
</head>
|
|
344
|
+
</html>
|
|
345
|
+
`;
|
|
346
|
+
const metadata = extractMetadata(html, "https://example.com");
|
|
347
|
+
t.is(metadata.canonicalUrl, "https://example.com/page");
|
|
348
|
+
});
|
|
349
|
+
test("does not resolve absolute canonical URL", (t) => {
|
|
350
|
+
const html = `
|
|
351
|
+
<html>
|
|
352
|
+
<head>
|
|
353
|
+
<link rel="canonical" href="https://other.com/page" />
|
|
354
|
+
</head>
|
|
355
|
+
</html>
|
|
356
|
+
`;
|
|
357
|
+
const metadata = extractMetadata(html, "https://example.com");
|
|
358
|
+
t.is(metadata.canonicalUrl, "https://other.com/page");
|
|
359
|
+
});
|
|
360
|
+
test("uses baseUrl as fallback for canonical URL", (t) => {
|
|
361
|
+
const html = "<html><body><p>No canonical</p></body></html>";
|
|
362
|
+
const metadata = extractMetadata(html, "https://example.com");
|
|
363
|
+
t.is(metadata.canonicalUrl, "https://example.com");
|
|
364
|
+
});
|
|
365
|
+
test("returns undefined for canonical URL when none found and no baseUrl", (t) => {
|
|
366
|
+
const html = "<html><body><p>No canonical</p></body></html>";
|
|
367
|
+
const metadata = extractMetadata(html);
|
|
368
|
+
t.is(metadata.canonicalUrl, undefined);
|
|
369
|
+
});
|
|
370
|
+
test("handles invalid relative URL gracefully", (t) => {
|
|
371
|
+
const html = `
|
|
372
|
+
<html>
|
|
373
|
+
<head>
|
|
374
|
+
<link rel="canonical" href="::invalid::" />
|
|
375
|
+
</head>
|
|
376
|
+
</html>
|
|
377
|
+
`;
|
|
378
|
+
t.notThrows(() => {
|
|
379
|
+
const metadata = extractMetadata(html, "https://example.com");
|
|
380
|
+
// The URL constructor will attempt to resolve it, even if invalid
|
|
381
|
+
// The important thing is it doesn't throw
|
|
382
|
+
t.truthy(metadata.canonicalUrl);
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
test("extracts all metadata fields together", (t) => {
|
|
386
|
+
const html = `
|
|
387
|
+
<html lang="en">
|
|
388
|
+
<head>
|
|
389
|
+
<meta property="og:title" content="Test Article" />
|
|
390
|
+
<meta property="og:description" content="Test description" />
|
|
391
|
+
<meta property="og:site_name" content="Test Site" />
|
|
392
|
+
<meta property="article:published_time" content="2025-01-15T10:30:00Z" />
|
|
393
|
+
<meta property="article:author" content="Test Author" />
|
|
394
|
+
<link rel="canonical" href="https://example.com/article" />
|
|
395
|
+
</head>
|
|
396
|
+
</html>
|
|
397
|
+
`;
|
|
398
|
+
const metadata = extractMetadata(html, "https://example.com");
|
|
399
|
+
t.is(metadata.title, "Test Article");
|
|
400
|
+
t.is(metadata.author, "Test Author");
|
|
401
|
+
t.is(metadata.excerpt, "Test description");
|
|
402
|
+
t.is(metadata.siteName, "Test Site");
|
|
403
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
404
|
+
t.is(metadata.language, "en");
|
|
405
|
+
t.is(metadata.canonicalUrl, "https://example.com/article");
|
|
406
|
+
});
|
|
407
|
+
test("handles empty HTML", (t) => {
|
|
408
|
+
const metadata = extractMetadata("");
|
|
409
|
+
t.is(metadata.title, undefined);
|
|
410
|
+
t.is(metadata.author, undefined);
|
|
411
|
+
t.is(metadata.excerpt, undefined);
|
|
412
|
+
t.is(metadata.siteName, undefined);
|
|
413
|
+
t.is(metadata.publishedTime, undefined);
|
|
414
|
+
t.is(metadata.language, undefined);
|
|
415
|
+
t.is(metadata.canonicalUrl, undefined);
|
|
416
|
+
});
|
|
417
|
+
test("trims whitespace from title", (t) => {
|
|
418
|
+
const html = `
|
|
419
|
+
<html>
|
|
420
|
+
<head>
|
|
421
|
+
<title> Spaced Title </title>
|
|
422
|
+
</head>
|
|
423
|
+
</html>
|
|
424
|
+
`;
|
|
425
|
+
const metadata = extractMetadata(html);
|
|
426
|
+
t.is(metadata.title, "Spaced Title");
|
|
427
|
+
});
|
|
428
|
+
test("trims whitespace from h1 title", (t) => {
|
|
429
|
+
const html = `
|
|
430
|
+
<html>
|
|
431
|
+
<body>
|
|
432
|
+
<h1> Spaced H1 </h1>
|
|
433
|
+
</body>
|
|
434
|
+
</html>
|
|
435
|
+
`;
|
|
436
|
+
const metadata = extractMetadata(html);
|
|
437
|
+
t.is(metadata.title, "Spaced H1");
|
|
438
|
+
});
|
|
439
|
+
test("extracts author from author-name class", (t) => {
|
|
440
|
+
const html = `
|
|
441
|
+
<html>
|
|
442
|
+
<body>
|
|
443
|
+
<div class="author-name">Full Name</div>
|
|
444
|
+
</body>
|
|
445
|
+
</html>
|
|
446
|
+
`;
|
|
447
|
+
const metadata = extractMetadata(html);
|
|
448
|
+
t.is(metadata.author, "Full Name");
|
|
449
|
+
});
|
|
450
|
+
test("uses first h1 when multiple exist", (t) => {
|
|
451
|
+
const html = `
|
|
452
|
+
<html>
|
|
453
|
+
<body>
|
|
454
|
+
<h1>First Title</h1>
|
|
455
|
+
<h1>Second Title</h1>
|
|
456
|
+
</body>
|
|
457
|
+
</html>
|
|
458
|
+
`;
|
|
459
|
+
const metadata = extractMetadata(html);
|
|
460
|
+
t.is(metadata.title, "First Title");
|
|
461
|
+
});
|
|
462
|
+
test("uses first time element when multiple exist", (t) => {
|
|
463
|
+
const html = `
|
|
464
|
+
<html>
|
|
465
|
+
<body>
|
|
466
|
+
<time datetime="2025-01-15T10:30:00Z">First</time>
|
|
467
|
+
<time datetime="2025-01-16T10:30:00Z">Second</time>
|
|
468
|
+
</body>
|
|
469
|
+
</html>
|
|
470
|
+
`;
|
|
471
|
+
const metadata = extractMetadata(html);
|
|
472
|
+
t.is(metadata.publishedTime, "2025-01-15T10:30:00Z");
|
|
473
|
+
});
|
|
474
|
+
test("uses first author-related element when multiple exist", (t) => {
|
|
475
|
+
const html = `
|
|
476
|
+
<html>
|
|
477
|
+
<body>
|
|
478
|
+
<div class="author">First Author</div>
|
|
479
|
+
<div class="author">Second Author</div>
|
|
480
|
+
</body>
|
|
481
|
+
</html>
|
|
482
|
+
`;
|
|
483
|
+
const metadata = extractMetadata(html);
|
|
484
|
+
t.is(metadata.author, "First Author");
|
|
485
|
+
});
|
|
486
|
+
//# sourceMappingURL=metadata-extractor.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-extractor.spec.js","sourceRoot":"","sources":["../../src/extractors/metadata-extractor.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":""}
|