@purepageio/fetch-engines 0.8.1 → 0.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.
- package/README.md +72 -35
- package/dist/StructuredContentEngine.d.ts.map +1 -1
- package/dist/StructuredContentEngine.js.map +1 -1
- package/dist/utils/markdown-converter.d.ts +10 -13
- package/dist/utils/markdown-converter.d.ts.map +1 -1
- package/dist/utils/markdown-converter.js +79 -632
- package/dist/utils/markdown-converter.js.map +1 -1
- package/package.json +3 -5
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# @purepageio/fetch-engines
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@purepageio/fetch-engines)
|
|
4
|
+
[](https://github.com/purepage/fetch-engines/actions/workflows/publish.yml)
|
|
4
5
|
[](https://opensource.org/licenses/MIT)
|
|
5
6
|
|
|
6
|
-
Fetch
|
|
7
|
+
Fetch web pages as clean Markdown or structured data. HTTP-first with automatic Playwright fallback, built for RAG pipelines and content extraction.
|
|
7
8
|
|
|
8
9
|
## Table of contents
|
|
9
10
|
|
|
@@ -12,6 +13,7 @@ Fetch websites with confidence. `@purepageio/fetch-engines` gives teams an HTTP-
|
|
|
12
13
|
- [Quick start](#quick-start)
|
|
13
14
|
- [Usage patterns](#usage-patterns)
|
|
14
15
|
- [Pick an engine](#pick-an-engine)
|
|
16
|
+
- [Markdown mode](#markdown-mode)
|
|
15
17
|
- [Structured extraction](#structured-extraction)
|
|
16
18
|
- [Configuration](#configuration)
|
|
17
19
|
- [Essentials](#essentials)
|
|
@@ -24,18 +26,25 @@ Fetch websites with confidence. `@purepageio/fetch-engines` gives teams an HTTP-
|
|
|
24
26
|
## Why fetch-engines?
|
|
25
27
|
|
|
26
28
|
- **One API for multiple strategies** – Call `fetchHTML` for rendered pages or `fetchContent` for raw responses. The library handles HTTP shortcuts and Playwright fallbacks automatically.
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
29
|
+
- **RAG-ready Markdown** – Convert any page to clean Markdown with boilerplate, nav, and SVG noise stripped out. Powered by a Rust-native converter.
|
|
30
|
+
- **Built-in retries, caching, and a managed browser pool** – Production defaults you can tune per request.
|
|
31
|
+
- **URL to structured data in one call** – Define a Zod schema, get typed results back via any OpenAI-compatible API. The page is fetched as Markdown first to minimise tokens.
|
|
32
|
+
- **Playwright is optional** – `FetchEngine` works without browser dependencies. Playwright is only loaded when you use `HybridEngine` or `PlaywrightEngine`.
|
|
30
33
|
|
|
31
34
|
## Installation
|
|
32
35
|
|
|
33
36
|
```bash
|
|
34
37
|
pnpm add @purepageio/fetch-engines
|
|
35
|
-
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If you plan to use `HybridEngine` or `PlaywrightEngine` (which launch a real browser), install the Playwright browsers once:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
36
43
|
pnpm exec playwright install
|
|
37
44
|
```
|
|
38
45
|
|
|
46
|
+
This step is **not needed** if you only use `FetchEngine` or `StructuredContentEngine`.
|
|
47
|
+
|
|
39
48
|
## Quick start
|
|
40
49
|
|
|
41
50
|
```typescript
|
|
@@ -53,11 +62,29 @@ await engine.cleanup();
|
|
|
53
62
|
|
|
54
63
|
### Pick an engine
|
|
55
64
|
|
|
56
|
-
| Engine | When to use it
|
|
57
|
-
| ------------------------- |
|
|
58
|
-
| `HybridEngine` | Default option. Starts with HTTP, then retries via Playwright for tougher pages.
|
|
59
|
-
| `FetchEngine` | Lightweight HTML/text fetching with zero browser overhead.
|
|
60
|
-
| `StructuredContentEngine` | Fetch a page and transform it into typed data with OpenAI.
|
|
65
|
+
| Engine | When to use it |
|
|
66
|
+
| ------------------------- | ------------------------------------------------------------------------------------- |
|
|
67
|
+
| `HybridEngine` | Default option. Starts with HTTP, then retries via Playwright for tougher pages. |
|
|
68
|
+
| `FetchEngine` | Lightweight HTML/text fetching with zero browser overhead. Supports `markdown: true`. |
|
|
69
|
+
| `StructuredContentEngine` | Fetch a page and transform it into typed data with OpenAI. |
|
|
70
|
+
|
|
71
|
+
### Markdown mode
|
|
72
|
+
|
|
73
|
+
Pass `markdown: true` to get clean Markdown instead of raw HTML — ideal for RAG pipelines, LLM context windows, and content indexing. The converter strips navigation, footers, sidebars, SVGs, and high-link-density boilerplate before converting via a Rust-native engine.
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { HybridEngine } from "@purepageio/fetch-engines";
|
|
77
|
+
|
|
78
|
+
const engine = new HybridEngine({ markdown: true });
|
|
79
|
+
const page = await engine.fetchHTML("https://example.com/blog/my-post");
|
|
80
|
+
|
|
81
|
+
console.log(page.content); // Clean Markdown with headings, tables, code blocks preserved
|
|
82
|
+
console.log(page.contentType); // "markdown"
|
|
83
|
+
|
|
84
|
+
await engine.cleanup();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`FetchEngine` also supports `markdown: true` for static pages that don't need JavaScript rendering.
|
|
61
88
|
|
|
62
89
|
### Structured extraction
|
|
63
90
|
|
|
@@ -77,6 +104,8 @@ const result = await fetchStructuredContent("https://example.com/article", schem
|
|
|
77
104
|
console.log(result.data.summary);
|
|
78
105
|
```
|
|
79
106
|
|
|
107
|
+
Under the hood, structured extraction fetches the page as Markdown first (same boilerplate removal as Markdown mode), then sends the cleaned content to the AI model — keeping token usage low and extraction quality high.
|
|
108
|
+
|
|
80
109
|
Set `OPENAI_API_KEY` (or `OPENROUTER_API_KEY`) before running structured helpers, or use `apiConfig` to connect to OpenAI-compatible APIs like OpenRouter. The engine automatically adds the `Authorization` header when you provide an API key:
|
|
81
110
|
|
|
82
111
|
```typescript
|
|
@@ -111,30 +140,30 @@ Check the inline TypeScript docs or the [`/examples`](./examples) directory for
|
|
|
111
140
|
|
|
112
141
|
Every option from `PlaywrightEngineConfig` (consumed by `HybridEngine`) with defaults:
|
|
113
142
|
|
|
114
|
-
| Option | Default | Purpose
|
|
115
|
-
| -------------------------- | ----------- |
|
|
116
|
-
| `headers` | `{}` | Extra headers merged into every request.
|
|
117
|
-
| `concurrentPages` | `3` | Maximum Playwright pages processed at once.
|
|
118
|
-
| `maxRetries` | `3` | Additional retry attempts after the first failure.
|
|
119
|
-
| `retryDelay` | `5000` | Milliseconds to wait between retries.
|
|
120
|
-
| `cacheTTL` | `900000` | Cache lifetime in ms (`0` disables caching).
|
|
121
|
-
| `useHttpFallback` | `true` | Try a fast HTTP GET before spinning up Playwright.
|
|
122
|
-
| `useHeadedModeFallback` | `false` | Automatically retry a domain in headed mode after repeated failures.
|
|
123
|
-
| `defaultFastMode` | `true` | Block non-critical assets and skip human simulation unless overridden.
|
|
124
|
-
| `simulateHumanBehavior` | `true` | When not in fast mode, add delays and scrolling to avoid bot detection.
|
|
125
|
-
| `maxBrowsers` | `2` | Highest number of Playwright browser instances kept in the pool.
|
|
126
|
-
| `maxPagesPerContext` | `6` | Pages opened per browser context before recycling it.
|
|
127
|
-
| `maxBrowserAge` | `1200000` | Milliseconds before a browser instance is torn down (20 minutes).
|
|
128
|
-
| `healthCheckInterval` | `60000` | Pool health check frequency in ms.
|
|
129
|
-
| `poolBlockedDomains` | `[]` | Domains blocked across every Playwright request (inherit pool defaults if empty).
|
|
130
|
-
| `poolBlockedResourceTypes` | `[]` | Resource types (e.g. `"image"`) blocked globally.
|
|
131
|
-
| `proxy` | `undefined` | Per-browser proxy `{ server, username?, password? }`.
|
|
132
|
-
| `useHeadedMode` | `false` | Force every browser to launch with a visible window.
|
|
133
|
-
| `markdown` | `
|
|
134
|
-
| `spaMode` | `false` | Enable SPA heuristics and allow additional waits for client rendering.
|
|
135
|
-
| `spaRenderDelayMs` | `0` | Extra delay after load when `spaMode` is `true`.
|
|
136
|
-
| `playwrightOnlyPatterns` | `[]` | URLs matching any string/regex go straight to Playwright, skipping HTTP fetches.
|
|
137
|
-
| `playwrightLaunchOptions` | `undefined` | Options passed to `browserType.launch` (see Playwright docs).
|
|
143
|
+
| Option | Default | Purpose |
|
|
144
|
+
| -------------------------- | ----------- | ------------------------------------------------------------------------------------------------ |
|
|
145
|
+
| `headers` | `{}` | Extra headers merged into every request. |
|
|
146
|
+
| `concurrentPages` | `3` | Maximum Playwright pages processed at once. |
|
|
147
|
+
| `maxRetries` | `3` | Additional retry attempts after the first failure. |
|
|
148
|
+
| `retryDelay` | `5000` | Milliseconds to wait between retries. |
|
|
149
|
+
| `cacheTTL` | `900000` | Cache lifetime in ms (`0` disables caching). |
|
|
150
|
+
| `useHttpFallback` | `true` | Try a fast HTTP GET before spinning up Playwright. |
|
|
151
|
+
| `useHeadedModeFallback` | `false` | Automatically retry a domain in headed mode after repeated failures. |
|
|
152
|
+
| `defaultFastMode` | `true` | Block non-critical assets and skip human simulation unless overridden. |
|
|
153
|
+
| `simulateHumanBehavior` | `true` | When not in fast mode, add delays and scrolling to avoid bot detection. |
|
|
154
|
+
| `maxBrowsers` | `2` | Highest number of Playwright browser instances kept in the pool. |
|
|
155
|
+
| `maxPagesPerContext` | `6` | Pages opened per browser context before recycling it. |
|
|
156
|
+
| `maxBrowserAge` | `1200000` | Milliseconds before a browser instance is torn down (20 minutes). |
|
|
157
|
+
| `healthCheckInterval` | `60000` | Pool health check frequency in ms. |
|
|
158
|
+
| `poolBlockedDomains` | `[]` | Domains blocked across every Playwright request (inherit pool defaults if empty). |
|
|
159
|
+
| `poolBlockedResourceTypes` | `[]` | Resource types (e.g. `"image"`) blocked globally. |
|
|
160
|
+
| `proxy` | `undefined` | Per-browser proxy `{ server, username?, password? }`. |
|
|
161
|
+
| `useHeadedMode` | `false` | Force every browser to launch with a visible window. |
|
|
162
|
+
| `markdown` | `false` | Return Markdown instead of raw HTML. Converts via a Rust-native engine with boilerplate removal. |
|
|
163
|
+
| `spaMode` | `false` | Enable SPA heuristics and allow additional waits for client rendering. |
|
|
164
|
+
| `spaRenderDelayMs` | `0` | Extra delay after load when `spaMode` is `true`. |
|
|
165
|
+
| `playwrightOnlyPatterns` | `[]` | URLs matching any string/regex go straight to Playwright, skipping HTTP fetches. |
|
|
166
|
+
| `playwrightLaunchOptions` | `undefined` | Options passed to `browserType.launch` (see Playwright docs). |
|
|
138
167
|
|
|
139
168
|
Per-request overrides: `fetchHTML` accepts `fastMode`, `markdown`, `spaMode`, and `headers`, while `fetchContent` supports `fastMode` and `headers`.
|
|
140
169
|
|
|
@@ -150,7 +179,15 @@ Failures raise a typed `FetchError` exposing `code`, `statusCode`, and the under
|
|
|
150
179
|
|
|
151
180
|
## Contributing
|
|
152
181
|
|
|
153
|
-
Issues and pull requests are welcome!
|
|
182
|
+
Issues and pull requests are welcome! Before submitting a change:
|
|
183
|
+
|
|
184
|
+
1. `pnpm test` — all tests pass
|
|
185
|
+
2. `pnpm lint` — no errors
|
|
186
|
+
3. `pnpm format` — code is formatted
|
|
187
|
+
4. Update `CHANGELOG.md` under `[Unreleased]`
|
|
188
|
+
5. Bump the version in `package.json` following [semver](https://semver.org/)
|
|
189
|
+
|
|
190
|
+
See [`AGENTS.md`](./AGENTS.md) for detailed guidelines on versioning, testing, and documentation.
|
|
154
191
|
|
|
155
192
|
## License
|
|
156
193
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructuredContentEngine.d.ts","sourceRoot":"","sources":["../src/StructuredContentEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"StructuredContentEngine.d.ts","sourceRoot":"","sources":["../src/StructuredContentEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAczD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,sJAAsJ;IACtJ,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,qDAAqD;IACrD,IAAI,EAAE,CAAC,CAAC;IACR,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,GAAE,sBAA2B;IAQ/C;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA6BhC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2ClC;;;;;;;;OAQG;IACG,sBAAsB,CAAC,CAAC,EAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAiMtC,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAOrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StructuredContentEngine.js","sourceRoot":"","sources":["../src/StructuredContentEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,kEAAkE;AAClE,+FAA+F;AAC/F,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"StructuredContentEngine.js","sourceRoot":"","sources":["../src/StructuredContentEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ export interface ConversionOptions {
|
|
|
3
3
|
maxContentLength?: number;
|
|
4
4
|
}
|
|
5
5
|
export declare class MarkdownConverter {
|
|
6
|
-
private turndownService;
|
|
7
6
|
constructor();
|
|
8
7
|
/**
|
|
9
8
|
* Converts HTML string to Markdown.
|
|
@@ -12,23 +11,21 @@ export declare class MarkdownConverter {
|
|
|
12
11
|
* @returns The converted Markdown string.
|
|
13
12
|
*/
|
|
14
13
|
convert(html: string, options?: ConversionOptions): string;
|
|
15
|
-
private setupPrioritizedRules;
|
|
16
|
-
private addContentExtractionRules;
|
|
17
|
-
private addStructureRules;
|
|
18
|
-
private addBlockRules;
|
|
19
|
-
private addInlineRules;
|
|
20
14
|
private preprocessHTML;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
* when no <th> exists. Skips layout tables marked with role="presentation".
|
|
24
|
-
*/
|
|
25
|
-
private normalizeTablesForMarkdown;
|
|
15
|
+
/** Remove img elements with .svg src (external SVG URLs). Inline SVG and data: URIs already stripped by PREPROCESSING_REMOVE_SELECTORS. */
|
|
16
|
+
private removeSvgImageRefs;
|
|
26
17
|
private removeBreadcrumbs;
|
|
18
|
+
/** Promote or inject a primary H1 heading using the provided title (from Kreuzberg metadata or DOM extraction). */
|
|
27
19
|
private ensurePrimaryHeading;
|
|
28
|
-
private flattenTableToSimpleGfm;
|
|
29
|
-
private sanitizeCellContentForTable;
|
|
30
20
|
private cleanupHtml;
|
|
31
21
|
private cleanupContentHtml;
|
|
22
|
+
/** Check if any CSS class token matches exactly, or if any token contains the substring (for hyphenated classes like "article-body"). */
|
|
23
|
+
private hasClass;
|
|
24
|
+
private hasClassSubstring;
|
|
25
|
+
/** Check if element matches a main content selector (node-html-parser has no matches()). */
|
|
26
|
+
private elementMatchesMainContent;
|
|
27
|
+
/** Check if element matches boilerplate selectors (node-html-parser has no matches()). */
|
|
28
|
+
private elementMatchesBoilerplate;
|
|
32
29
|
private removeHighLinkDensityElements;
|
|
33
30
|
private detectForumPage;
|
|
34
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-converter.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-converter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown-converter.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-converter.ts"],"names":[],"mappings":"AAiEA,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,qBAAa,iBAAiB;;IAK5B;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM;IAerE,OAAO,CAAC,cAAc;IAgGtB,2IAA2I;IAC3I,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IA6BzB,mHAAmH;IACnH,OAAO,CAAC,oBAAoB;IAkC5B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,kBAAkB;IAqB1B,yIAAyI;IACzI,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,iBAAiB;IAIzB,4FAA4F;IAC5F,OAAO,CAAC,yBAAyB;IAuBjC,0FAA0F;IAC1F,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,6BAA6B;IA0CrC,OAAO,CAAC,eAAe;IAyDvB;;;;;OAKG;IAIH,OAAO,CAAC,sBAAsB;IA+C9B,OAAO,CAAC,4BAA4B;IAmCpC,OAAO,CAAC,0BAA0B;IAuFlC,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,mBAAmB;CAwD5B"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { gfm } from "turndown-plugin-gfm";
|
|
1
|
+
import { convert as kreuzbergConvert } from "@kreuzberg/html-to-markdown";
|
|
3
2
|
import { parse, HTMLElement as NHPHTMLElement } from "node-html-parser";
|
|
4
3
|
// --- Constants ---
|
|
5
4
|
// Preprocessing - Selectors for removal (balanced approach)
|
|
@@ -8,6 +7,8 @@ const PREPROCESSING_REMOVE_SELECTORS = [
|
|
|
8
7
|
"style",
|
|
9
8
|
"noscript",
|
|
10
9
|
"iframe:not([title])", // Keep iframes with titles (potential embeds)
|
|
10
|
+
"svg", // Inline SVGs - decorative icons, bloat RAG with meaningless path data
|
|
11
|
+
"img[src*='data:image/svg']", // Base64 inline SVG images
|
|
11
12
|
];
|
|
12
13
|
// Preprocessing - Selectors for identifying potential main content
|
|
13
14
|
const MAIN_CONTENT_SELECTORS = [
|
|
@@ -50,47 +51,13 @@ const MIN_LINK_DENSITY_TEXT_LENGTH = 50; // Lowered slightly from original
|
|
|
50
51
|
const DEFAULT_LINK_DENSITY_THRESHOLD = 0.4; // Slightly lower threshold
|
|
51
52
|
// Preprocessing - Forum Detection
|
|
52
53
|
const MIN_FORUM_INDICATOR_COUNT = 3;
|
|
53
|
-
// Turndown - Code block detection
|
|
54
|
-
const CODE_BLOCK_LANG_PREFIXES = ["language-", "lang-"];
|
|
55
54
|
// Postprocessing
|
|
56
55
|
const POSTPROCESSING_MAX_CONSECUTIVE_NEWLINES = 2; // Keep paragraphs separate
|
|
57
|
-
// Turndown specific
|
|
58
|
-
const DEFAULT_ORDERED_LIST_ITEM_PREFIX = "1. ";
|
|
59
|
-
const TURNDOWN_NODE_ELEMENT_TYPE = 1;
|
|
60
|
-
const TURNDOWN_PRESENTATION_ROLE = "presentation";
|
|
61
|
-
const TURNDOWN_PRESERVE_CLASS = "preserve";
|
|
62
56
|
// --- Class Definition ---
|
|
63
57
|
export class MarkdownConverter {
|
|
64
|
-
turndownService;
|
|
65
58
|
constructor() {
|
|
66
|
-
|
|
67
|
-
headingStyle: "atx",
|
|
68
|
-
codeBlockStyle: "fenced",
|
|
69
|
-
bulletListMarker: "-",
|
|
70
|
-
strongDelimiter: "**",
|
|
71
|
-
emDelimiter: "*",
|
|
72
|
-
hr: "---",
|
|
73
|
-
// Use nodeType check instead of window.HTMLElement
|
|
74
|
-
// Important: Do NOT blanket-preserve <table> elements here — let the GFM plugin
|
|
75
|
-
// convert them to Markdown. Only preserve explicitly marked layout/preserved elements.
|
|
76
|
-
keepReplacement: ((_content, node) => {
|
|
77
|
-
// Node.ELEMENT_NODE is 1
|
|
78
|
-
if (node.nodeType === TURNDOWN_NODE_ELEMENT_TYPE) {
|
|
79
|
-
const htmlElement = node;
|
|
80
|
-
const role = htmlElement.getAttribute("role");
|
|
81
|
-
const preserve = htmlElement.classList?.contains(TURNDOWN_PRESERVE_CLASS);
|
|
82
|
-
if (role === TURNDOWN_PRESENTATION_ROLE || preserve) {
|
|
83
|
-
return htmlElement.outerHTML;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return "";
|
|
87
|
-
}),
|
|
88
|
-
});
|
|
89
|
-
this.turndownService.use(gfm);
|
|
90
|
-
// Setup conversion rules
|
|
91
|
-
this.setupPrioritizedRules();
|
|
59
|
+
// No initialization needed for Kreuzberg - it's stateless
|
|
92
60
|
}
|
|
93
|
-
// --- Public Method ---
|
|
94
61
|
/**
|
|
95
62
|
* Converts HTML string to Markdown.
|
|
96
63
|
* @param html The HTML string to convert.
|
|
@@ -100,301 +67,12 @@ export class MarkdownConverter {
|
|
|
100
67
|
convert(html, options = {}) {
|
|
101
68
|
// Preprocess HTML to clean and extract main content
|
|
102
69
|
const preprocessedHtml = this.preprocessHTML(html);
|
|
103
|
-
// Convert preprocessed HTML to Markdown
|
|
104
|
-
let markdown =
|
|
70
|
+
// Convert preprocessed HTML to Markdown using Kreuzberg (Rust-native)
|
|
71
|
+
let markdown = kreuzbergConvert(preprocessedHtml, { headingStyle: "Atx" });
|
|
105
72
|
// Post-process Markdown for cleanup
|
|
106
73
|
markdown = this.postprocessMarkdown(markdown, options);
|
|
107
74
|
return markdown;
|
|
108
75
|
}
|
|
109
|
-
// --- Turndown Rule Setup ---
|
|
110
|
-
setupPrioritizedRules() {
|
|
111
|
-
this.addContentExtractionRules();
|
|
112
|
-
this.addStructureRules();
|
|
113
|
-
this.addBlockRules();
|
|
114
|
-
this.addInlineRules();
|
|
115
|
-
}
|
|
116
|
-
// We rely on preprocessing to remove nav/menus/high-link-density areas.
|
|
117
|
-
// These rules primarily help Turndown understand the *structure* of the *intended* content.
|
|
118
|
-
addContentExtractionRules() {
|
|
119
|
-
this.turndownService.addRule("main-content-marker", {
|
|
120
|
-
filter: (node) => {
|
|
121
|
-
// Node.ELEMENT_NODE is 1
|
|
122
|
-
if (node.nodeType !== TURNDOWN_NODE_ELEMENT_TYPE)
|
|
123
|
-
return false;
|
|
124
|
-
const el = node;
|
|
125
|
-
const element = node;
|
|
126
|
-
return (el.tagName.toLowerCase() === "main" ||
|
|
127
|
-
["main", "article"].includes(el.getAttribute("role") || "") ||
|
|
128
|
-
MAIN_CONTENT_SELECTORS.some((selector) => {
|
|
129
|
-
try {
|
|
130
|
-
return element.matches(selector) && selector !== "body";
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
}));
|
|
136
|
-
},
|
|
137
|
-
// Just pass content through, this rule is mainly for filter priority/debugging
|
|
138
|
-
replacement: (content) => content,
|
|
139
|
-
});
|
|
140
|
-
// Explicitly remove elements that should definitely not be in Markdown
|
|
141
|
-
const unwantedTags = [
|
|
142
|
-
"script",
|
|
143
|
-
"style",
|
|
144
|
-
"noscript",
|
|
145
|
-
"iframe",
|
|
146
|
-
"button",
|
|
147
|
-
"input",
|
|
148
|
-
"select",
|
|
149
|
-
"textarea",
|
|
150
|
-
"form",
|
|
151
|
-
"canvas",
|
|
152
|
-
/*'svg' removed */ "audio",
|
|
153
|
-
"video",
|
|
154
|
-
];
|
|
155
|
-
this.turndownService.addRule("remove-unwanted", {
|
|
156
|
-
filter: unwantedTags,
|
|
157
|
-
replacement: () => "",
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
addStructureRules() {
|
|
161
|
-
// Article structure (less critical now preprocessing extracts content)
|
|
162
|
-
this.turndownService.addRule("article", {
|
|
163
|
-
filter: "article",
|
|
164
|
-
replacement: (content) => `\n\n${content}\n\n`, // Add separation
|
|
165
|
-
});
|
|
166
|
-
// Section structure (less critical now preprocessing extracts content)
|
|
167
|
-
this.turndownService.addRule("section", {
|
|
168
|
-
filter: "section",
|
|
169
|
-
replacement: (content) => `\n\n${content}\n\n`, // Add separation
|
|
170
|
-
});
|
|
171
|
-
// Preserve heading levels correctly
|
|
172
|
-
// this.turndownService.keep(["h1", "h2", "h3", "h4", "h5", "h6"]); // REMOVED - Use default ATX headings
|
|
173
|
-
}
|
|
174
|
-
addBlockRules() {
|
|
175
|
-
// Lists (ensure proper nesting indentation)
|
|
176
|
-
this.turndownService.addRule("list", {
|
|
177
|
-
filter: ["ul", "ol"],
|
|
178
|
-
replacement: (content, node) => {
|
|
179
|
-
// Node.ELEMENT_NODE is 1
|
|
180
|
-
if (node.nodeType !== TURNDOWN_NODE_ELEMENT_TYPE)
|
|
181
|
-
return content;
|
|
182
|
-
// Check if the parent is a list item (nested list)
|
|
183
|
-
const parent = node.parentNode;
|
|
184
|
-
const indent = parent && parent.nodeName.toLowerCase() === "li" ? " " : "";
|
|
185
|
-
// Ensure content is handled line by line for indentation
|
|
186
|
-
// Trim trailing spaces from each line before joining
|
|
187
|
-
return ("\n" +
|
|
188
|
-
content
|
|
189
|
-
.split("\n")
|
|
190
|
-
.map((line) => indent + line.trimEnd())
|
|
191
|
-
.join("\n")
|
|
192
|
-
.trim() +
|
|
193
|
-
"\n");
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
// List items
|
|
197
|
-
this.turndownService.addRule("listItem", {
|
|
198
|
-
filter: "li",
|
|
199
|
-
// Use arrow function for consistency, as 'this' is not used.
|
|
200
|
-
replacement: (content, node, options) => {
|
|
201
|
-
content = content
|
|
202
|
-
.replace(/^\s+/gm, "") // Remove leading whitespace from each line
|
|
203
|
-
.replace(/\n(?!\s*$)/gm, "\n "); // Indent subsequent lines correctly
|
|
204
|
-
let prefix = options.bulletListMarker + " ";
|
|
205
|
-
const parentNode = node.parentNode;
|
|
206
|
-
if (parentNode && parentNode.nodeName === "OL") {
|
|
207
|
-
try {
|
|
208
|
-
const start = parentNode.getAttribute("start");
|
|
209
|
-
const elementNode = node;
|
|
210
|
-
const parentElement = parentNode;
|
|
211
|
-
const index = Array.prototype.indexOf.call(parentElement.children, elementNode);
|
|
212
|
-
prefix = (start ? Number(start) + index : index + 1) + ". ";
|
|
213
|
-
}
|
|
214
|
-
catch (e) {
|
|
215
|
-
prefix = DEFAULT_ORDERED_LIST_ITEM_PREFIX;
|
|
216
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
217
|
-
console.warn(`MarkdownConverter: Error processing OL start attribute or LI index: ${message}`, e instanceof Error ? e : undefined);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return prefix + content.trim() + "\n"; // Add newline after each item
|
|
221
|
-
},
|
|
222
|
-
});
|
|
223
|
-
// Tables - Relying on GFM plugin
|
|
224
|
-
// Blockquotes
|
|
225
|
-
this.turndownService.addRule("blockquote", {
|
|
226
|
-
filter: "blockquote",
|
|
227
|
-
replacement: (content) => {
|
|
228
|
-
// Trim leading/trailing newlines from content and add > prefix correctly
|
|
229
|
-
const trimmedContent = content.trim();
|
|
230
|
-
return "\n\n> " + trimmedContent.replace(/\n/g, "\n> ") + "\n\n";
|
|
231
|
-
},
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
addInlineRules() {
|
|
235
|
-
// Links - Ensure proper formatting and title preservation
|
|
236
|
-
this.turndownService.addRule("link", {
|
|
237
|
-
filter: (node, _options) => {
|
|
238
|
-
// Check nodeType and nodeName first, then cast for getAttribute
|
|
239
|
-
return node.nodeType === 1 && node.nodeName === "A" && !!node.getAttribute("href");
|
|
240
|
-
},
|
|
241
|
-
replacement: (content, node) => {
|
|
242
|
-
const element = node;
|
|
243
|
-
const href = element.getAttribute("href") || "";
|
|
244
|
-
const title = element.getAttribute("title");
|
|
245
|
-
// Use content if available and not just whitespace, otherwise use href as text
|
|
246
|
-
const text = content.trim() ? content.trim() : href;
|
|
247
|
-
// Decode URI components, handling potential errors
|
|
248
|
-
let decodedHref = href;
|
|
249
|
-
try {
|
|
250
|
-
// Decode only if it looks like it might be encoded
|
|
251
|
-
if (href.includes("%")) {
|
|
252
|
-
decodedHref = decodeURI(href);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
catch (e) {
|
|
256
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
257
|
-
console.warn(`Failed to decode URI '${href}': ${message}. Keeping original.`, e instanceof Error ? e : undefined);
|
|
258
|
-
// Keep original href if decoding fails
|
|
259
|
-
}
|
|
260
|
-
return title ? `[${text}](${decodedHref} \"${title}\")` : `[${text}](${decodedHref})`;
|
|
261
|
-
},
|
|
262
|
-
});
|
|
263
|
-
// Images - Handle figures and captions
|
|
264
|
-
this.turndownService.addRule("figure", {
|
|
265
|
-
filter: "figure",
|
|
266
|
-
replacement: (content, node) => {
|
|
267
|
-
// Node.ELEMENT_NODE is 1
|
|
268
|
-
if (node.nodeType !== 1)
|
|
269
|
-
return content;
|
|
270
|
-
const element = node;
|
|
271
|
-
// Use DOM methods on the casted element
|
|
272
|
-
const img = element.querySelector("img");
|
|
273
|
-
const figcaption = element.querySelector("figcaption");
|
|
274
|
-
let markdown = "";
|
|
275
|
-
let mainImgMd = "";
|
|
276
|
-
if (img) {
|
|
277
|
-
const src = img.getAttribute("src") || "";
|
|
278
|
-
const alt = img.getAttribute("alt") || "";
|
|
279
|
-
const title = img.getAttribute("title");
|
|
280
|
-
mainImgMd = title ? `` : ``;
|
|
281
|
-
}
|
|
282
|
-
// Process the original content provided by Turndown (handles nested elements)
|
|
283
|
-
let processedContent = content.trim();
|
|
284
|
-
// If the figure primarily contains the image and caption, structure around the image
|
|
285
|
-
if (mainImgMd) {
|
|
286
|
-
markdown = mainImgMd;
|
|
287
|
-
// Remove the image representation from the processed content if Turndown included it
|
|
288
|
-
// Use a simple placeholder to avoid issues with special chars in alt/src
|
|
289
|
-
const imgPlaceholder = ` || ""})`;
|
|
290
|
-
processedContent = processedContent.replace(imgPlaceholder, "").trim();
|
|
291
|
-
}
|
|
292
|
-
if (figcaption) {
|
|
293
|
-
const captionText = figcaption.textContent?.trim();
|
|
294
|
-
if (captionText) {
|
|
295
|
-
markdown += `\n\n_${captionText}_`; // Use italics for caption below the image
|
|
296
|
-
// Remove the caption representation from the processed content
|
|
297
|
-
processedContent = processedContent.replace(captionText, "").trim();
|
|
298
|
-
processedContent = processedContent.replace(/^_+|_+$/g, "").trim(); // Remove surrounding underscores if any
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
// Append any remaining content from the figure
|
|
302
|
-
if (processedContent) {
|
|
303
|
-
// Avoid adding just empty placeholders or insignificant content
|
|
304
|
-
if (processedContent.length > 10 || /[a-zA-Z0-9]/.test(processedContent)) {
|
|
305
|
-
markdown += `\n\n${processedContent}`;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
return "\n\n" + markdown.trim() + "\n\n";
|
|
309
|
-
},
|
|
310
|
-
});
|
|
311
|
-
// Standalone Images (not in figures)
|
|
312
|
-
this.turndownService.addRule("image", {
|
|
313
|
-
filter: (node) => {
|
|
314
|
-
// Node.ELEMENT_NODE is 1, it's an IMG, and has src
|
|
315
|
-
return node.nodeType === 1 && node.nodeName === "IMG" && !!node.getAttribute("src");
|
|
316
|
-
},
|
|
317
|
-
replacement: (_content, node) => {
|
|
318
|
-
const element = node;
|
|
319
|
-
const src = element.getAttribute("src") || "";
|
|
320
|
-
const alt = element.getAttribute("alt") || "";
|
|
321
|
-
const title = element.getAttribute("title");
|
|
322
|
-
// Add surrounding newlines for block display
|
|
323
|
-
return title ? `\n\n\n\n` : `\n\n\n\n`;
|
|
324
|
-
},
|
|
325
|
-
});
|
|
326
|
-
// Code Blocks - Enhanced detection
|
|
327
|
-
this.turndownService.addRule("code-block", {
|
|
328
|
-
filter: (node) => {
|
|
329
|
-
// Node.ELEMENT_NODE is 1
|
|
330
|
-
if (node.nodeType !== 1)
|
|
331
|
-
return false;
|
|
332
|
-
const element = node;
|
|
333
|
-
// Must be a <pre> tag
|
|
334
|
-
const isPre = element.tagName.toLowerCase() === "pre";
|
|
335
|
-
if (!isPre)
|
|
336
|
-
return false;
|
|
337
|
-
// Consider it code if it has a <code> child or specific classes/attributes
|
|
338
|
-
const hasCodeChild = element.querySelector("code") !== null;
|
|
339
|
-
const hasCodeClass = /highlight|syntax|code|listing|source/i.test(element.className);
|
|
340
|
-
const hasLangAttribute = !!element.getAttribute("lang") || !!element.getAttribute("language");
|
|
341
|
-
return hasCodeChild || hasCodeClass || hasLangAttribute;
|
|
342
|
-
},
|
|
343
|
-
replacement: (content, node) => {
|
|
344
|
-
// Node.ELEMENT_NODE is 1
|
|
345
|
-
if (node.nodeType !== 1)
|
|
346
|
-
return content.trim(); // Should be ELEMENT_NODE based on filter
|
|
347
|
-
const element = node;
|
|
348
|
-
// Detect language
|
|
349
|
-
let language = "";
|
|
350
|
-
const codeElement = element.querySelector("code");
|
|
351
|
-
// 1. Check attributes on <pre> or <code>
|
|
352
|
-
language =
|
|
353
|
-
element.getAttribute("lang") ||
|
|
354
|
-
element.getAttribute("language") ||
|
|
355
|
-
(codeElement ? codeElement.getAttribute("lang") || codeElement.getAttribute("language") : "") ||
|
|
356
|
-
"";
|
|
357
|
-
// 2. Check for "language-*" or "lang-*" class
|
|
358
|
-
if (!language) {
|
|
359
|
-
const classes = (element.className + " " + (codeElement?.className || "")).split(" ").filter(Boolean);
|
|
360
|
-
for (const cls of classes) {
|
|
361
|
-
for (const prefix of CODE_BLOCK_LANG_PREFIXES) {
|
|
362
|
-
if (cls.startsWith(prefix)) {
|
|
363
|
-
language = cls.substring(prefix.length);
|
|
364
|
-
break;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
if (language)
|
|
368
|
-
break;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
// Clean up content - remove leading/trailing newlines often added
|
|
372
|
-
const cleanedContent = content.trim();
|
|
373
|
-
// Format code block
|
|
374
|
-
return `\n\n\`\`\`${language}\n${cleanedContent}\n\`\`\`\n\n`;
|
|
375
|
-
},
|
|
376
|
-
});
|
|
377
|
-
// Inline Code
|
|
378
|
-
this.turndownService.addRule("inlineCode", {
|
|
379
|
-
filter: (node) => node.nodeName === "CODE" && node.parentNode?.nodeName !== "PRE",
|
|
380
|
-
replacement: (content) => {
|
|
381
|
-
// Ensure content is trimmed and handle potential backticks inside
|
|
382
|
-
const trimmed = content.trim();
|
|
383
|
-
if (!trimmed)
|
|
384
|
-
return ""; // Don't render empty code tags
|
|
385
|
-
// Determine delimiter based on content
|
|
386
|
-
let delimiter = "`";
|
|
387
|
-
if (trimmed.includes("`")) {
|
|
388
|
-
delimiter = "``";
|
|
389
|
-
// If content starts or ends with backtick, add space when using ``
|
|
390
|
-
if (trimmed.startsWith("`") || trimmed.endsWith("`")) {
|
|
391
|
-
return `${delimiter} ${trimmed} ${delimiter}`;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
return delimiter + trimmed + delimiter;
|
|
395
|
-
},
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
76
|
// --- HTML Preprocessing ---
|
|
399
77
|
preprocessHTML(html) {
|
|
400
78
|
// This function performs multi-stage processing on the HTML string:
|
|
@@ -433,16 +111,15 @@ export class MarkdownConverter {
|
|
|
433
111
|
console.warn(`Skipping invalid selector during preprocessing: ${selector}`, e);
|
|
434
112
|
}
|
|
435
113
|
});
|
|
114
|
+
// Remove img elements pointing to .svg URLs (decorative logos/icons; bloat RAG)
|
|
115
|
+
this.removeSvgImageRefs(rootElement);
|
|
436
116
|
// Remove breadcrumb UI blocks explicitly (often low link density)
|
|
437
117
|
this.removeBreadcrumbs(rootElement);
|
|
438
118
|
this.removeHighLinkDensityElements(rootElement, DEFAULT_LINK_DENSITY_THRESHOLD);
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
rootElement.querySelector("meta[name='twitter:title']")?.getAttribute("content") ||
|
|
444
|
-
rootElement.querySelector("meta[name='DC.title']")?.getAttribute("content") ||
|
|
445
|
-
rootElement.querySelector("title")?.textContent ||
|
|
119
|
+
const bestTitle = rootElement.querySelector("meta[property='og:title']")?.getAttribute("content") ??
|
|
120
|
+
rootElement.querySelector("meta[name='twitter:title']")?.getAttribute("content") ??
|
|
121
|
+
rootElement.querySelector("meta[name='DC.title']")?.getAttribute("content") ??
|
|
122
|
+
rootElement.querySelector("title")?.textContent ??
|
|
446
123
|
"";
|
|
447
124
|
// Drop <head> from the DOM so we don't leak <title> etc. into content
|
|
448
125
|
try {
|
|
@@ -484,48 +161,13 @@ export class MarkdownConverter {
|
|
|
484
161
|
return this.cleanupHtml(html); // Return original (but cleaned) HTML on failure
|
|
485
162
|
}
|
|
486
163
|
}
|
|
487
|
-
/**
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
if (!(table instanceof NHPHTMLElement))
|
|
495
|
-
continue;
|
|
496
|
-
const role = table.getAttribute("role");
|
|
497
|
-
if (role && role.toLowerCase() === "presentation")
|
|
498
|
-
continue; // skip layout tables
|
|
499
|
-
// Lossy-flatten complex tables to be GFM-compatible (best-effort). If flattening
|
|
500
|
-
// fails (unexpected markup), fall back to preserving the original.
|
|
501
|
-
const hasSpans = table.querySelector("[colspan], [rowspan]") !== null;
|
|
502
|
-
if (hasSpans) {
|
|
503
|
-
const ok = this.flattenTableToSimpleGfm(table);
|
|
504
|
-
if (!ok) {
|
|
505
|
-
const existing = table.getAttribute("class");
|
|
506
|
-
const newClass = existing ? `${existing} ${TURNDOWN_PRESERVE_CLASS}` : TURNDOWN_PRESERVE_CLASS;
|
|
507
|
-
table.setAttribute("class", newClass);
|
|
508
|
-
}
|
|
509
|
-
continue;
|
|
510
|
-
}
|
|
511
|
-
// If table already has headers, leave as-is
|
|
512
|
-
if (table.querySelector("th"))
|
|
513
|
-
continue;
|
|
514
|
-
const firstRow = table.querySelector("tr");
|
|
515
|
-
if (!firstRow || !(firstRow instanceof NHPHTMLElement))
|
|
516
|
-
continue;
|
|
517
|
-
// Promote all cells in the first row to header cells
|
|
518
|
-
const cells = firstRow.querySelectorAll("td");
|
|
519
|
-
if (!cells || cells.length === 0)
|
|
520
|
-
continue;
|
|
521
|
-
for (const cell of cells) {
|
|
522
|
-
if (cell instanceof NHPHTMLElement && cell.tagName === "TD") {
|
|
523
|
-
// Switch tag to TH so GFM plugin recognizes header row
|
|
524
|
-
// node-html-parser allows mutating tagName directly
|
|
525
|
-
cell.tagName = "TH";
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
}
|
|
164
|
+
/** Remove img elements with .svg src (external SVG URLs). Inline SVG and data: URIs already stripped by PREPROCESSING_REMOVE_SELECTORS. */
|
|
165
|
+
removeSvgImageRefs(root) {
|
|
166
|
+
root.querySelectorAll("img[src]").forEach((el) => {
|
|
167
|
+
const src = el.getAttribute("src") || "";
|
|
168
|
+
if (src.toLowerCase().includes(".svg"))
|
|
169
|
+
el.remove();
|
|
170
|
+
});
|
|
529
171
|
}
|
|
530
172
|
// Remove common breadcrumb containers explicitly, regardless of link density
|
|
531
173
|
removeBreadcrumbs(root) {
|
|
@@ -557,37 +199,27 @@ export class MarkdownConverter {
|
|
|
557
199
|
}
|
|
558
200
|
}
|
|
559
201
|
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
// Promote or inject a primary H1 heading using best available title.
|
|
563
|
-
ensurePrimaryHeading(root, content, providedTitle) {
|
|
202
|
+
/** Promote or inject a primary H1 heading using the provided title (from Kreuzberg metadata or DOM extraction). */
|
|
203
|
+
ensurePrimaryHeading(_root, content, providedTitle) {
|
|
564
204
|
if (!(content instanceof NHPHTMLElement))
|
|
565
205
|
return;
|
|
566
|
-
|
|
567
|
-
const
|
|
568
|
-
root.querySelector("meta[property='og:title']")?.getAttribute("content") ||
|
|
569
|
-
root.querySelector("meta[name='twitter:title']")?.getAttribute("content") ||
|
|
570
|
-
root.querySelector("meta[name='DC.title']")?.getAttribute("content") ||
|
|
571
|
-
root.querySelector("title")?.textContent ||
|
|
572
|
-
"";
|
|
573
|
-
// Find existing headings in content
|
|
206
|
+
const normalize = (s) => (s || "").trim().replace(/\s+/g, " ");
|
|
207
|
+
const titleNorm = normalize(providedTitle);
|
|
574
208
|
const firstH1 = content.querySelector("h1");
|
|
575
209
|
const firstHeading = content.querySelector("h1, h2, h3, h4, h5, h6");
|
|
576
|
-
const normalize = (s) => (s || "").trim().replace(/\s+/g, " ");
|
|
577
|
-
const titleNorm = normalize(bestTitle);
|
|
578
210
|
const h1Text = normalize(firstH1?.textContent || "");
|
|
579
211
|
if (firstH1) {
|
|
580
212
|
// If document title is longer and contains the existing H1, replace H1 with the document title
|
|
581
213
|
if (titleNorm &&
|
|
582
214
|
titleNorm.length > h1Text.length &&
|
|
583
215
|
(titleNorm.includes(h1Text) || h1Text.includes(titleNorm.split("|")[0].trim()))) {
|
|
584
|
-
firstH1.set_content(
|
|
216
|
+
firstH1.set_content(providedTitle ?? "");
|
|
585
217
|
}
|
|
586
218
|
return;
|
|
587
219
|
}
|
|
588
220
|
// No H1 present: prefer document title if available
|
|
589
221
|
if (titleNorm) {
|
|
590
|
-
const h1 = parse(`<h1>${
|
|
222
|
+
const h1 = parse(`<h1>${providedTitle ?? ""}</h1>`).firstChild;
|
|
591
223
|
content.prepend(h1);
|
|
592
224
|
return;
|
|
593
225
|
}
|
|
@@ -596,127 +228,6 @@ export class MarkdownConverter {
|
|
|
596
228
|
firstHeading.tagName = "H1";
|
|
597
229
|
}
|
|
598
230
|
}
|
|
599
|
-
// Attempt to flatten a table with colspans/rowspans into a simple table
|
|
600
|
-
// with no spans so GFM can convert it. Returns true on success.
|
|
601
|
-
flattenTableToSimpleGfm(table) {
|
|
602
|
-
try {
|
|
603
|
-
const rows = table.querySelectorAll("tr");
|
|
604
|
-
if (!rows || rows.length === 0)
|
|
605
|
-
return false;
|
|
606
|
-
let spanMap = {};
|
|
607
|
-
const grid = [];
|
|
608
|
-
let maxCols = 0;
|
|
609
|
-
for (const tr of rows) {
|
|
610
|
-
if (!(tr instanceof NHPHTMLElement))
|
|
611
|
-
continue;
|
|
612
|
-
// Pre-fill from active rowspans
|
|
613
|
-
const nextSpanMap = {};
|
|
614
|
-
const currentRow = [];
|
|
615
|
-
// Place carried-over cells first
|
|
616
|
-
const spanCols = Object.keys(spanMap)
|
|
617
|
-
.map((k) => Number(k))
|
|
618
|
-
.sort((a, b) => a - b);
|
|
619
|
-
for (const colIdx of spanCols) {
|
|
620
|
-
const sc = spanMap[colIdx];
|
|
621
|
-
currentRow[colIdx] = sc.content;
|
|
622
|
-
if (sc.remaining - 1 > 0) {
|
|
623
|
-
nextSpanMap[colIdx] = { content: sc.content, remaining: sc.remaining - 1 };
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
// Place actual cells of the row, respecting existing occupied columns
|
|
627
|
-
const cells = tr.querySelectorAll("th, td");
|
|
628
|
-
let insertCol = 0;
|
|
629
|
-
for (const cell of cells) {
|
|
630
|
-
if (!(cell instanceof NHPHTMLElement))
|
|
631
|
-
continue;
|
|
632
|
-
// Find next free column
|
|
633
|
-
while (currentRow[insertCol] !== undefined)
|
|
634
|
-
insertCol++;
|
|
635
|
-
const colSpan = Math.max(1, parseInt(cell.getAttribute("colspan") || "1", 10) || 1);
|
|
636
|
-
const rowSpan = Math.max(1, parseInt(cell.getAttribute("rowspan") || "1", 10) || 1);
|
|
637
|
-
const content = this.sanitizeCellContentForTable(cell.innerHTML || "");
|
|
638
|
-
for (let i = 0; i < colSpan; i++) {
|
|
639
|
-
const col = insertCol + i;
|
|
640
|
-
currentRow[col] = content;
|
|
641
|
-
if (rowSpan > 1) {
|
|
642
|
-
const existing = nextSpanMap[col];
|
|
643
|
-
nextSpanMap[col] = { content, remaining: Math.max(existing?.remaining || 0, rowSpan - 1) };
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
insertCol += colSpan;
|
|
647
|
-
}
|
|
648
|
-
// Normalize row
|
|
649
|
-
const length = currentRow.length;
|
|
650
|
-
maxCols = Math.max(maxCols, length);
|
|
651
|
-
grid.push(currentRow);
|
|
652
|
-
spanMap = nextSpanMap;
|
|
653
|
-
}
|
|
654
|
-
// Drop leading fully-empty rows (often style-only)
|
|
655
|
-
while (grid.length && grid[0].every((c) => !c || !c.trim())) {
|
|
656
|
-
grid.shift();
|
|
657
|
-
}
|
|
658
|
-
// Ensure all rows have equal length
|
|
659
|
-
for (const row of grid) {
|
|
660
|
-
for (let i = 0; i < maxCols; i++) {
|
|
661
|
-
if (row[i] === undefined)
|
|
662
|
-
row[i] = "";
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
// Pick a header row: first non-empty row (after dropping empties)
|
|
666
|
-
const headerRowIndex = 0;
|
|
667
|
-
// Build a simple table HTML without spans
|
|
668
|
-
let html = "<table><tbody>";
|
|
669
|
-
for (let r = 0; r < grid.length; r++) {
|
|
670
|
-
const row = grid[r];
|
|
671
|
-
html += "<tr>";
|
|
672
|
-
for (const cellContent of row) {
|
|
673
|
-
if (r === headerRowIndex) {
|
|
674
|
-
html += `<th>${cellContent}</th>`;
|
|
675
|
-
}
|
|
676
|
-
else {
|
|
677
|
-
html += `<td>${cellContent}</td>`;
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
html += "</tr>";
|
|
681
|
-
}
|
|
682
|
-
html += "</tbody></table>";
|
|
683
|
-
// Replace original table with the flattened one
|
|
684
|
-
const replacementRoot = parse(html);
|
|
685
|
-
const newTable = replacementRoot.querySelector("table");
|
|
686
|
-
if (!newTable)
|
|
687
|
-
return false;
|
|
688
|
-
table.replaceWith(newTable);
|
|
689
|
-
return true;
|
|
690
|
-
}
|
|
691
|
-
catch {
|
|
692
|
-
return false;
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
// Reduce blocky/complex markup inside table cells to inline-friendly HTML so Turndown
|
|
696
|
-
// does not break the table structure. Joins list items with " | ", removes outer divs,
|
|
697
|
-
// flattens paragraphs and <br> to spaces, and trims whitespace.
|
|
698
|
-
sanitizeCellContentForTable(content) {
|
|
699
|
-
if (!content)
|
|
700
|
-
return "";
|
|
701
|
-
let c = content;
|
|
702
|
-
// Normalize lists: turn <li> items into inline separated values
|
|
703
|
-
c = c.replace(/<li[^>]*>/gi, "").replace(/<\/li>/gi, " • ");
|
|
704
|
-
c = c.replace(/<\/(ul|ol)>/gi, "").replace(/<(ul|ol)[^>]*>/gi, "");
|
|
705
|
-
// Remove outer div/span wrappers but keep inner content
|
|
706
|
-
c = c.replace(/<div[^>]*>/gi, "").replace(/<\/div>/gi, " ");
|
|
707
|
-
c = c.replace(/<span[^>]*>/gi, "").replace(/<\/span>/gi, "");
|
|
708
|
-
// Flatten paragraphs and line breaks
|
|
709
|
-
c = c.replace(/<p[^>]*>/gi, "").replace(/<\/p>/gi, " ");
|
|
710
|
-
c = c.replace(/<br\s*\/?>(\s*)/gi, " ");
|
|
711
|
-
// Normalize bullet separators spacing
|
|
712
|
-
c = c.replace(/\s*•\s*/g, " • ");
|
|
713
|
-
c = c.replace(/(\s*•\s*)+$/g, "");
|
|
714
|
-
// Avoid Markdown table column separators inside cells
|
|
715
|
-
c = c.replace(/\|/g, " • ");
|
|
716
|
-
// Collapse multiple whitespace and trim
|
|
717
|
-
c = c.replace(/\s+/g, " ").trim();
|
|
718
|
-
return c;
|
|
719
|
-
}
|
|
720
231
|
cleanupHtml(html) {
|
|
721
232
|
// Remove specific non-standard characters/patterns observed in the wild
|
|
722
233
|
return (html
|
|
@@ -745,11 +256,57 @@ export class MarkdownConverter {
|
|
|
745
256
|
.replace(/\s*\n\s*/g, "\n")
|
|
746
257
|
.trim());
|
|
747
258
|
}
|
|
259
|
+
/** Check if any CSS class token matches exactly, or if any token contains the substring (for hyphenated classes like "article-body"). */
|
|
260
|
+
hasClass(cls, exact) {
|
|
261
|
+
return cls.split(/\s+/).some((token) => token === exact);
|
|
262
|
+
}
|
|
263
|
+
hasClassSubstring(cls, sub) {
|
|
264
|
+
return cls.split(/\s+/).some((token) => token.includes(sub));
|
|
265
|
+
}
|
|
266
|
+
/** Check if element matches a main content selector (node-html-parser has no matches()). */
|
|
267
|
+
elementMatchesMainContent(el) {
|
|
268
|
+
const tag = el.tagName?.toLowerCase() || "";
|
|
269
|
+
const role = (el.getAttribute?.("role") || "").toLowerCase();
|
|
270
|
+
const cls = (el.getAttribute?.("class") || "").toLowerCase();
|
|
271
|
+
const id = (el.getAttribute?.("id") || "").toLowerCase();
|
|
272
|
+
if (tag === "body" || tag === "main" || tag === "article")
|
|
273
|
+
return true;
|
|
274
|
+
if (role === "main" || role === "article")
|
|
275
|
+
return true;
|
|
276
|
+
if (this.hasClassSubstring(cls, "article-body") ||
|
|
277
|
+
this.hasClassSubstring(cls, "post-content") ||
|
|
278
|
+
this.hasClassSubstring(cls, "main-content") ||
|
|
279
|
+
this.hasClassSubstring(cls, "entry-content") ||
|
|
280
|
+
this.hasClass(cls, "article") ||
|
|
281
|
+
this.hasClass(cls, "post") ||
|
|
282
|
+
this.hasClass(cls, "content") ||
|
|
283
|
+
this.hasClass(cls, "entry") ||
|
|
284
|
+
this.hasClass(cls, "blog-post"))
|
|
285
|
+
return true;
|
|
286
|
+
if (id.includes("article-body") || id.includes("main-content"))
|
|
287
|
+
return true;
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
/** Check if element matches boilerplate selectors (node-html-parser has no matches()). */
|
|
291
|
+
elementMatchesBoilerplate(el) {
|
|
292
|
+
const tag = el.tagName?.toLowerCase() || "";
|
|
293
|
+
const role = (el.getAttribute?.("role") || "").toLowerCase();
|
|
294
|
+
const cls = (el.getAttribute?.("class") || "").toLowerCase();
|
|
295
|
+
if (["header", "footer", "nav", "aside"].includes(tag))
|
|
296
|
+
return true;
|
|
297
|
+
if (role === "navigation" || role === "complementary" || role === "banner")
|
|
298
|
+
return true;
|
|
299
|
+
if (this.hasClassSubstring(cls, "sidebar") ||
|
|
300
|
+
this.hasClassSubstring(cls, "widget") ||
|
|
301
|
+
this.hasClassSubstring(cls, "menu") ||
|
|
302
|
+
this.hasClassSubstring(cls, "nav") ||
|
|
303
|
+
this.hasClassSubstring(cls, "header") ||
|
|
304
|
+
this.hasClassSubstring(cls, "footer"))
|
|
305
|
+
return true;
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
748
308
|
// Potentially performance-intensive: involves iterating over many elements
|
|
749
309
|
// and performing sub-queries (querySelectorAll, textContent) for each.
|
|
750
|
-
// Complexity can be roughly O(B * (T_avg + L_avg * S_avg + M_avg)) where B is number of
|
|
751
|
-
// boilerplate candidates, T_avg is avg cost of textContent, L_avg is avg links per candidate,
|
|
752
|
-
// S_avg is avg cost of link text access, M_avg is avg cost of matches().
|
|
753
310
|
removeHighLinkDensityElements(element, threshold) {
|
|
754
311
|
const potentialBoilerplate = element.querySelectorAll("div, nav, ul, aside, section, .sidebar, .widget, .menu, [role='navigation'], [role='menubar']");
|
|
755
312
|
for (const el of Array.from(potentialBoilerplate)) {
|
|
@@ -778,113 +335,13 @@ export class MarkdownConverter {
|
|
|
778
335
|
// Avoid removing the element if it contains a primary content marker
|
|
779
336
|
const containsMainContent = el.querySelector('main, article, [role="main"], [role="article"]') !== null;
|
|
780
337
|
// Also avoid removing if it IS the main content candidate itself
|
|
781
|
-
const isMainContent =
|
|
782
|
-
try {
|
|
783
|
-
// Explicitly assert type before calling matches
|
|
784
|
-
/* @ts-expect-error TODO: fix this */
|
|
785
|
-
return el.matches(selector);
|
|
786
|
-
}
|
|
787
|
-
catch {
|
|
788
|
-
return false;
|
|
789
|
-
}
|
|
790
|
-
});
|
|
338
|
+
const isMainContent = this.elementMatchesMainContent(el);
|
|
791
339
|
if (!containsMainContent && !isMainContent) {
|
|
792
340
|
el.remove();
|
|
793
341
|
}
|
|
794
342
|
}
|
|
795
343
|
}
|
|
796
344
|
}
|
|
797
|
-
/*
|
|
798
|
-
private extractDocumentMetadata(root: NHPHTMLElement): string[] {
|
|
799
|
-
const metadata: string[] = [];
|
|
800
|
-
const addedMeta: Set<string> = new Set(); // Track added keys to avoid duplicates
|
|
801
|
-
|
|
802
|
-
// Helper to add metadata if value exists and key hasn't been added
|
|
803
|
-
const addMeta = (key: string, value: string | null | undefined, isTitle = false) => {
|
|
804
|
-
const cleanedValue = value?.trim();
|
|
805
|
-
if (cleanedValue && !addedMeta.has(key.toLowerCase())) {
|
|
806
|
-
// Skip injecting title as Markdown to avoid duplicating content H1
|
|
807
|
-
if (!isTitle) {
|
|
808
|
-
metadata.push(`${key}: ${cleanedValue}`);
|
|
809
|
-
}
|
|
810
|
-
addedMeta.add(key.toLowerCase());
|
|
811
|
-
}
|
|
812
|
-
};
|
|
813
|
-
|
|
814
|
-
// 1. Title (Prioritize specific ones, fallback to <title>)
|
|
815
|
-
addMeta("Title", root.querySelector("meta[property='og:title']")?.getAttribute("content"), true);
|
|
816
|
-
addMeta("Title", root.querySelector("meta[name='twitter:title']")?.getAttribute("content"), true);
|
|
817
|
-
addMeta("Title", root.querySelector("meta[name='DC.title']")?.getAttribute("content"), true);
|
|
818
|
-
addMeta("Title", root.querySelector("title")?.textContent, true);
|
|
819
|
-
|
|
820
|
-
// 2. Description
|
|
821
|
-
addMeta("Description", root.querySelector("meta[property='og:description']")?.getAttribute("content"));
|
|
822
|
-
addMeta("Description", root.querySelector("meta[name='twitter:description']")?.getAttribute("content"));
|
|
823
|
-
addMeta("Description", root.querySelector("meta[name='description']")?.getAttribute("content"));
|
|
824
|
-
addMeta("Description", root.querySelector("meta[name='DC.description']")?.getAttribute("content"));
|
|
825
|
-
|
|
826
|
-
// 3. Author
|
|
827
|
-
addMeta("Author", root.querySelector("meta[name='author']")?.getAttribute("content"));
|
|
828
|
-
addMeta("Author", root.querySelector("meta[property='article:author']")?.getAttribute("content"));
|
|
829
|
-
addMeta("Author", root.querySelector("[rel='author']")?.textContent);
|
|
830
|
-
|
|
831
|
-
// 4. Publication Date
|
|
832
|
-
addMeta("Published", root.querySelector("meta[property='article:published_time']")?.getAttribute("content"));
|
|
833
|
-
addMeta("Published", root.querySelector("meta[name='publish-date']")?.getAttribute("content"));
|
|
834
|
-
addMeta("Published", root.querySelector("time[itemprop='datePublished']")?.getAttribute("datetime"));
|
|
835
|
-
addMeta("Published", root.querySelector("time")?.getAttribute("datetime")); // Generic time tag
|
|
836
|
-
|
|
837
|
-
// 5. Canonical URL
|
|
838
|
-
addMeta("URL", root.querySelector("link[rel='canonical']")?.getAttribute("href"));
|
|
839
|
-
addMeta("URL", root.querySelector("meta[property='og:url']")?.getAttribute("content"));
|
|
840
|
-
|
|
841
|
-
// 6. Extract JSON-LD
|
|
842
|
-
const jsonLdScripts = root.querySelectorAll("script[type='application/ld+json']");
|
|
843
|
-
if (jsonLdScripts.length > 0) {
|
|
844
|
-
const jsonLdData = Array.from(jsonLdScripts)
|
|
845
|
-
.map((script) => {
|
|
846
|
-
try {
|
|
847
|
-
// Ensure script content exists before parsing
|
|
848
|
-
const textContent = script.textContent;
|
|
849
|
-
return textContent ? JSON.parse(textContent) : null;
|
|
850
|
-
} catch (e: unknown) {
|
|
851
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
852
|
-
console.warn(`Failed to parse JSON-LD content: ${message}`, e instanceof Error ? e : undefined);
|
|
853
|
-
return null;
|
|
854
|
-
}
|
|
855
|
-
})
|
|
856
|
-
.filter((item): item is object => item !== null); // Type guard for filter
|
|
857
|
-
|
|
858
|
-
if (jsonLdData.length > 0 && !addedMeta.has("json-ld")) {
|
|
859
|
-
// Keep JSON-LD as a single block; will be injected as HTML later
|
|
860
|
-
metadata.push(`<details><summary>JSON-LD Metadata</summary>\n<pre><code class="language-json">${
|
|
861
|
-
JSON.stringify(jsonLdData, null, 2)
|
|
862
|
-
}</code></pre>\n</details>`);
|
|
863
|
-
addedMeta.add("json-ld");
|
|
864
|
-
|
|
865
|
-
// Add other relevant fields like 'author', 'datePublished', etc.
|
|
866
|
-
jsonLdData.forEach((jsonData) => {
|
|
867
|
-
if (typeof jsonData === "object" && jsonData !== null) {
|
|
868
|
-
// Safely extract publisher name from JSON-LD object
|
|
869
|
-
const publisher = (jsonData as Record<string, unknown>).publisher as unknown;
|
|
870
|
-
let orgName: string | undefined;
|
|
871
|
-
if (publisher && typeof publisher === "object") {
|
|
872
|
-
const name = (publisher as Record<string, unknown>).name;
|
|
873
|
-
if (typeof name === "string") {
|
|
874
|
-
orgName = name;
|
|
875
|
-
}
|
|
876
|
-
} else if (typeof publisher === "string") {
|
|
877
|
-
orgName = publisher; // Some JSON-LD use a string for publisher
|
|
878
|
-
}
|
|
879
|
-
addMeta("Organization", orgName);
|
|
880
|
-
}
|
|
881
|
-
});
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
return metadata;
|
|
886
|
-
}
|
|
887
|
-
*/
|
|
888
345
|
detectForumPage(root) {
|
|
889
346
|
// Count indicators across different selector groups
|
|
890
347
|
const countMatches = (selectors) => {
|
|
@@ -941,8 +398,8 @@ export class MarkdownConverter {
|
|
|
941
398
|
* @returns The calculated score for the element.
|
|
942
399
|
*/
|
|
943
400
|
// This scoring function is called for each candidate element during content extraction.
|
|
944
|
-
// It involves text content access, querySelectorAll("p"), and
|
|
945
|
-
// contributing to the overall complexity of extractArticleContentElement.
|
|
401
|
+
// It involves text content access, querySelectorAll("p"), and elementMatchesBoilerplate()
|
|
402
|
+
// (node-html-parser has no matches()), contributing to the overall complexity of extractArticleContentElement.
|
|
946
403
|
_calculateElementScore(element, currentMaxScore) {
|
|
947
404
|
// Basic scoring: text length
|
|
948
405
|
const textLength = (element.textContent || "").trim().length;
|
|
@@ -961,18 +418,8 @@ export class MarkdownConverter {
|
|
|
961
418
|
// Penalize common boilerplate containers/roles
|
|
962
419
|
if (["HEADER", "FOOTER", "NAV", "ASIDE"].includes(element.tagName))
|
|
963
420
|
score *= 0.3;
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
/* @ts-expect-error TODO: fix this (existing issue with NHPHTMLElement and matches) */
|
|
967
|
-
if (element.matches(BOILERPLATE_SELECTORS_FOR_PENALTY)) {
|
|
968
|
-
score *= 0.2;
|
|
969
|
-
}
|
|
970
|
-
}
|
|
971
|
-
catch (e) {
|
|
972
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
973
|
-
console.warn(`MarkdownConverter: Error matching selector in _calculateElementScore: ${message}`);
|
|
974
|
-
/* Ignore selector match errors, but log a warning */
|
|
975
|
-
}
|
|
421
|
+
if (this.elementMatchesBoilerplate(element))
|
|
422
|
+
score *= 0.2;
|
|
976
423
|
// Penalize if it contains high-link density elements that weren't removed
|
|
977
424
|
// Using a constant for the threshold (e.g., HIGH_LINK_DENSITY_THRESHOLD_PENALTY = 0.6)
|
|
978
425
|
const HIGH_LINK_DENSITY_THRESHOLD_PENALTY = 0.6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-converter.js","sourceRoot":"","sources":["../../src/utils/markdown-converter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown-converter.js","sourceRoot":"","sources":["../../src/utils/markdown-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@purepageio/fetch-engines",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Fetch web pages as clean Markdown or structured data. HTTP-first with automatic Playwright fallback, built for RAG pipelines and content extraction.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"files": [
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@ai-sdk/openai": "^2.0.30",
|
|
15
15
|
"@ai-sdk/openai-compatible": "^1.0.28",
|
|
16
|
+
"@kreuzberg/html-to-markdown": "^2.27.2",
|
|
16
17
|
"ai": "^5.0.44",
|
|
17
18
|
"axios": "^1.12.0",
|
|
18
19
|
"node-html-parser": "^7.0.1",
|
|
@@ -21,8 +22,6 @@
|
|
|
21
22
|
"playwright-extra": "^4.3.6",
|
|
22
23
|
"puppeteer-extra-plugin": "^3.2.3",
|
|
23
24
|
"puppeteer-extra-plugin-stealth": "^2.11.2",
|
|
24
|
-
"turndown": "^7.2.0",
|
|
25
|
-
"turndown-plugin-gfm": "^1.0.2",
|
|
26
25
|
"user-agents": "^1.1.208",
|
|
27
26
|
"uuid": "^11.1.0",
|
|
28
27
|
"zod": "^4.1.8"
|
|
@@ -32,7 +31,6 @@
|
|
|
32
31
|
"@types/axios": "^0.14.0",
|
|
33
32
|
"@types/jsdom": "^21.1.6",
|
|
34
33
|
"@types/node": "^18.0.0",
|
|
35
|
-
"@types/turndown": "^5.0.5",
|
|
36
34
|
"@types/user-agents": "^1.0.4",
|
|
37
35
|
"@types/uuid": "^10.0.0",
|
|
38
36
|
"@typescript-eslint/eslint-plugin": "^8.29.0",
|