webforai 1.3.0 → 1.3.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 +10 -14
- package/dist/cjs/extract-hast/readability.js +20 -14
- package/dist/cjs/extract-hast/utils.js +1 -1
- package/dist/cjs/extract-mdast.js +47 -0
- package/dist/cjs/html-to-markdown.test.js +145 -0
- package/dist/cjs/html-to-mdast.js +3 -1
- package/dist/cjs/link-replacer.test.js +47 -0
- package/dist/cjs/mdast-handlers/custom-a-handler.js +5 -1
- package/dist/cjs/mdast-to-markdown.js +2 -1
- package/dist/extract-hast/readability.js +20 -14
- package/dist/extract-hast/utils.js +1 -1
- package/dist/extract-mdast.js +24 -0
- package/dist/html-to-markdown.test.js +123 -0
- package/dist/html-to-mdast.js +3 -1
- package/dist/link-replacer.test.js +47 -0
- package/dist/mdast-handlers/custom-a-handler.js +5 -1
- package/dist/mdast-to-markdown.js +2 -1
- package/dist/types/extract-hast/readability.js.map +1 -1
- package/dist/types/extract-hast/utils.js.map +1 -1
- package/dist/types/extract-mdast.d.ts +2 -0
- package/dist/types/extract-mdast.js.map +1 -0
- package/dist/types/html-to-mdast.js.map +1 -1
- package/dist/types/mdast-handlers/custom-a-handler.js.map +1 -1
- package/dist/types/mdast-to-markdown.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -15,8 +15,8 @@ A library that provides a web interface for AI
|
|
|
15
15
|
|
|
16
16
|
There is a demo API for Html2Markdown deployed on CloudflareWorker. Please access the following link
|
|
17
17
|
|
|
18
|
-
- [
|
|
19
|
-
- [https://webforai.inaridiy.workers.dev/?
|
|
18
|
+
- [NPM Package page](https://webforai.inaridiy.workers.dev/?url=https://www.npmjs.com/package/webforai)
|
|
19
|
+
- [Wikipedia of Cloudflare (AI Mode)](https://webforai.inaridiy.workers.dev/?url=https://en.wikipedia.org/wiki/Cloudflare&mode=ai)
|
|
20
20
|
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
@@ -34,13 +34,20 @@ import { loadHtml } from "webforai/loaders/playwright";
|
|
|
34
34
|
const url = "https://www.npmjs.com/package/webforai";
|
|
35
35
|
const html = await loadHtml(url);
|
|
36
36
|
|
|
37
|
-
const markdown = htmlToMarkdown(html, {
|
|
37
|
+
const markdown = htmlToMarkdown(html, { baseUrl: url });
|
|
38
38
|
|
|
39
39
|
await fs.writeFile("output.md", markdown);
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
other examples are in [examples](./examples/simple/src/index.ts)
|
|
43
43
|
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
- [Simple Example](https://github.com/inaridiy/webforai/tree/main/examples/simple/src/index.ts)
|
|
47
|
+
- [Scraping With ChatGPT API](https://github.com/inaridiy/webforai/blob/main/examples/scraping/src/index.ts)
|
|
48
|
+
- [Translate Markdown with Splitter](https://github.com/inaridiy/webforai/tree/main/examples/translate)
|
|
49
|
+
- [Cloudflare Worker with puppeteer & DO](https://github.com/inaridiy/webforai/tree/main/examples/worker)
|
|
50
|
+
|
|
44
51
|
## Usage
|
|
45
52
|
|
|
46
53
|
### Main Functions
|
|
@@ -61,14 +68,3 @@ Convert Mdast to Markdown. If `solveLinks` is specified, the relative links in t
|
|
|
61
68
|
|
|
62
69
|
**`loadHtml(url: string, options?: LoadHtmlOptions): Promise<string>`**
|
|
63
70
|
Load HTML from the specified URL. This function uses Playwright internally.
|
|
64
|
-
|
|
65
|
-
## Early Users
|
|
66
|
-
|
|
67
|
-
### Voice Genius - Explanatory video generation by AI
|
|
68
|
-
|
|
69
|
-
<img src="https://github.com/inaridiy/webforai/blob/main/images/voice-genius.png" width="300px">
|
|
70
|
-
|
|
71
|
-
by [@moons14](https://twitter.com/moons_dev)
|
|
72
|
-
|
|
73
|
-
AI can be used to automatically generate highly accurate commentary videos.
|
|
74
|
-
Supports conversations and presentations using synthesized voice, embedding of images in videos, etc.
|
|
@@ -30,7 +30,7 @@ const UNLIKELY_ROLES = ["menu", "menubar", "complementary", "navigation", "alert
|
|
|
30
30
|
const REGEXPS = {
|
|
31
31
|
hidden: /hidden|invisible|fallback-image/i,
|
|
32
32
|
byline: /byline|author|dateline|writtenby|p-author/i,
|
|
33
|
-
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore/i,
|
|
33
|
+
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore|uls-language-block/i,
|
|
34
34
|
okMaybeItsaCandidate: /and|article|body|column|content|main|shadow|code/i
|
|
35
35
|
};
|
|
36
36
|
const BODY_SELECTORS = ["article", "#article", ".article_body", ".article-body", "#content", ".entry", "main"];
|
|
@@ -89,18 +89,28 @@ const unlikelyElementFilter = (node) => {
|
|
|
89
89
|
return true;
|
|
90
90
|
}
|
|
91
91
|
const element = node;
|
|
92
|
-
const match = (0, import_utils.matchString)(element);
|
|
93
92
|
if (["body", "article", "main", "section", "a"].includes(element.tagName)) {
|
|
94
93
|
return true;
|
|
95
94
|
}
|
|
96
95
|
if ((0, import_utils.hasAncestors)(element, ["table", "code"], 3)) {
|
|
97
96
|
return true;
|
|
98
97
|
}
|
|
98
|
+
const match = (0, import_utils.matchString)(element);
|
|
99
99
|
if (REGEXPS.unlikelyCandidates.test(match) && !REGEXPS.okMaybeItsaCandidate.test(match)) {
|
|
100
100
|
return false;
|
|
101
101
|
}
|
|
102
102
|
return true;
|
|
103
103
|
};
|
|
104
|
+
const isImageLink = (element) => {
|
|
105
|
+
const a = (0, import_hast_util_select.select)("a", element);
|
|
106
|
+
const img = (0, import_hast_util_select.select)("img", a);
|
|
107
|
+
if (!(a && img)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const imgFilename = img.properties.src?.toString().split("/").pop();
|
|
111
|
+
const hrefFilename = a.properties.href?.toString().split("/").pop();
|
|
112
|
+
return imgFilename === hrefFilename && imgFilename;
|
|
113
|
+
};
|
|
104
114
|
const removeEmptyFilter = (node) => {
|
|
105
115
|
if (node.type !== "element") {
|
|
106
116
|
return true;
|
|
@@ -109,6 +119,9 @@ const removeEmptyFilter = (node) => {
|
|
|
109
119
|
if (!PARAGRAPH_TAGS.includes(element.tagName)) {
|
|
110
120
|
return true;
|
|
111
121
|
}
|
|
122
|
+
if (isImageLink(element)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
112
125
|
const text = (0, import_hast_util_to_string.toString)(element);
|
|
113
126
|
if (text.length < 10) {
|
|
114
127
|
return false;
|
|
@@ -119,7 +132,7 @@ const readabilityExtractHast = (hast) => {
|
|
|
119
132
|
const lang = String((0, import_hast_util_select.select)("html", hast)?.properties.lang || tryGetLang(hast) || "en");
|
|
120
133
|
const body = (0, import_hast_util_select.select)("body", hast) ?? hast;
|
|
121
134
|
const proxiedHast = (0, import_unist_util_parents.parents)(body);
|
|
122
|
-
|
|
135
|
+
const baseFilterd = (0, import_unist_util_filter.filter)(proxiedHast, (node) => {
|
|
123
136
|
if (!metadataFilter(node)) {
|
|
124
137
|
return false;
|
|
125
138
|
}
|
|
@@ -133,17 +146,7 @@ const readabilityExtractHast = (hast) => {
|
|
|
133
146
|
}
|
|
134
147
|
const baseText = (0, import_hast_util_to_string.toString)(baseFilterd);
|
|
135
148
|
let minimalLength = lang in BASE_MINIMAL_LENGTH ? BASE_MINIMAL_LENGTH[lang] : 500;
|
|
136
|
-
if (baseText.length
|
|
137
|
-
const filterd = (0, import_unist_util_filter.filter)(baseFilterd, (node) => {
|
|
138
|
-
if (!unlikelyElementFilter(node)) {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
return true;
|
|
142
|
-
});
|
|
143
|
-
if (filterd) {
|
|
144
|
-
baseFilterd = filterd;
|
|
145
|
-
}
|
|
146
|
-
} else {
|
|
149
|
+
if (baseText.length < minimalLength) {
|
|
147
150
|
minimalLength = Math.max(0, baseText.length - 200);
|
|
148
151
|
}
|
|
149
152
|
let bodyTree = baseFilterd;
|
|
@@ -168,6 +171,9 @@ const readabilityExtractHast = (hast) => {
|
|
|
168
171
|
if (!removeEmptyFilter(node)) {
|
|
169
172
|
return false;
|
|
170
173
|
}
|
|
174
|
+
if (!unlikelyElementFilter(node)) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
171
177
|
return true;
|
|
172
178
|
});
|
|
173
179
|
return finalTree;
|
|
@@ -24,7 +24,7 @@ __export(utils_exports, {
|
|
|
24
24
|
matchString: () => matchString
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(utils_exports);
|
|
27
|
-
const matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}
|
|
27
|
+
const matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}`;
|
|
28
28
|
const classnames = (element) => {
|
|
29
29
|
if (Array.isArray(element.properties.className)) {
|
|
30
30
|
return element.properties.className;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var extract_mdast_exports = {};
|
|
20
|
+
__export(extract_mdast_exports, {
|
|
21
|
+
extractMdast: () => extractMdast
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(extract_mdast_exports);
|
|
24
|
+
var import_unist_util_filter = require("unist-util-filter");
|
|
25
|
+
const DECLATION_TYPES = ["blockquote", "strong", "emphasis", "delete"];
|
|
26
|
+
const emptyDeclarationFilter = (node) => {
|
|
27
|
+
if (!DECLATION_TYPES.includes(node.type)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (node.children.length === 0) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
};
|
|
35
|
+
const extractMdast = (node) => {
|
|
36
|
+
const extracted = (0, import_unist_util_filter.filter)(node, (node2) => {
|
|
37
|
+
if (!emptyDeclarationFilter(node2)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
});
|
|
42
|
+
return extracted;
|
|
43
|
+
};
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
extractMdast
|
|
47
|
+
});
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (let key of __getOwnPropNames(from))
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
}
|
|
14
|
+
return to;
|
|
15
|
+
};
|
|
16
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var import_fastest_levenshtein = require("fastest-levenshtein");
|
|
25
|
+
var import_vitest = require("vitest");
|
|
26
|
+
var import_html_to_markdown = require("./html-to-markdown");
|
|
27
|
+
const html = `
|
|
28
|
+
<h1>Hello, world!</h1>
|
|
29
|
+
<p>This is a paragraph.</p>
|
|
30
|
+
<a href="/example.html">Example</a>
|
|
31
|
+
<img src="/example.jpg" alt="Example" />
|
|
32
|
+
<ul>
|
|
33
|
+
<li>Item 1</li>
|
|
34
|
+
<li>Item 2</li>
|
|
35
|
+
</ul>
|
|
36
|
+
`;
|
|
37
|
+
const expected = `# Hello, world!
|
|
38
|
+
|
|
39
|
+
This is a paragraph.
|
|
40
|
+
|
|
41
|
+
[Example](/example.html)
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
* Item 1
|
|
46
|
+
* Item 2
|
|
47
|
+
`;
|
|
48
|
+
const baseUrlReplaced = `# Hello, world!
|
|
49
|
+
|
|
50
|
+
This is a paragraph.
|
|
51
|
+
|
|
52
|
+
[Example](https://example.com/example.html)
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
* Item 1
|
|
57
|
+
* Item 2
|
|
58
|
+
`;
|
|
59
|
+
const linkAsText = `# Hello, world!
|
|
60
|
+
|
|
61
|
+
This is a paragraph.
|
|
62
|
+
|
|
63
|
+
Example
|
|
64
|
+
|
|
65
|
+

|
|
66
|
+
|
|
67
|
+
- Item 1
|
|
68
|
+
- Item 2
|
|
69
|
+
`;
|
|
70
|
+
const imageHidden = `# Hello, world!
|
|
71
|
+
|
|
72
|
+
This is a paragraph.
|
|
73
|
+
|
|
74
|
+
[Example](/example.html)
|
|
75
|
+
|
|
76
|
+
- Item 1
|
|
77
|
+
- Item 2
|
|
78
|
+
`;
|
|
79
|
+
const htmlTable = `
|
|
80
|
+
<table>
|
|
81
|
+
<tr>
|
|
82
|
+
<th>Header 1</th>
|
|
83
|
+
<th>Header 2</th>
|
|
84
|
+
</tr>
|
|
85
|
+
<tr>
|
|
86
|
+
<td>Cell 1</td>
|
|
87
|
+
<td>Cell 2</td>
|
|
88
|
+
</tr>
|
|
89
|
+
</table>
|
|
90
|
+
`;
|
|
91
|
+
const expectedTableMarkdown = `
|
|
92
|
+
| Header 1 | Header 2 |
|
|
93
|
+
| -------- | -------- |
|
|
94
|
+
| Cell 1 | Cell 2 |
|
|
95
|
+
`;
|
|
96
|
+
const expectedTableText = `Header 1 Header 2
|
|
97
|
+
Cell 1 Cell 2`;
|
|
98
|
+
(0, import_vitest.describe)("htmlToMarkdown", () => {
|
|
99
|
+
(0, import_vitest.it)("should convert HTML to Markdown", () => {
|
|
100
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html, { extractors: false });
|
|
101
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, expected);
|
|
102
|
+
(0, import_vitest.expect)(d).lte(5);
|
|
103
|
+
});
|
|
104
|
+
(0, import_vitest.it)("should convert HTML to Markdown with replaced base URL", () => {
|
|
105
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html, { baseUrl: "https://example.com", extractors: false });
|
|
106
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, baseUrlReplaced);
|
|
107
|
+
(0, import_vitest.expect)(d).lte(5);
|
|
108
|
+
});
|
|
109
|
+
(0, import_vitest.it)("should convert HTML to Markdown with links as text", () => {
|
|
110
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html, { linkAsText: true, extractors: false });
|
|
111
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, linkAsText);
|
|
112
|
+
(0, import_vitest.expect)(d).lte(5);
|
|
113
|
+
});
|
|
114
|
+
(0, import_vitest.it)("should convert HTML to Markdown with hidden images", () => {
|
|
115
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html, { hideImage: true, extractors: false });
|
|
116
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, imageHidden);
|
|
117
|
+
(0, import_vitest.expect)(d).lte(5);
|
|
118
|
+
});
|
|
119
|
+
(0, import_vitest.it)("should convert HTML table to Markdown table", () => {
|
|
120
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(htmlTable, { extractors: false });
|
|
121
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, expectedTableMarkdown);
|
|
122
|
+
(0, import_vitest.expect)(d).lte(5);
|
|
123
|
+
});
|
|
124
|
+
(0, import_vitest.it)("should convert HTML table with table as text option", () => {
|
|
125
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(htmlTable, { tableAsText: true, extractors: false });
|
|
126
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, expectedTableText);
|
|
127
|
+
(0, import_vitest.expect)(d).lte(10);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
(0, import_vitest.describe)("htmlToMarkdown E2E", () => {
|
|
131
|
+
(0, import_vitest.it)("should convert npm README to Markdown ", async () => {
|
|
132
|
+
const html2 = await fetch("https://www.npmjs.com/package/webforai").then((res) => res.text());
|
|
133
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html2, { baseUrl: "https://www.npmjs.com/package/webforai" });
|
|
134
|
+
const original = await import("../README.md?raw");
|
|
135
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, original.default);
|
|
136
|
+
(0, import_vitest.expect)(d).lte(400);
|
|
137
|
+
});
|
|
138
|
+
(0, import_vitest.it)("should convert GitHub README to Markdown ", async () => {
|
|
139
|
+
const html2 = await fetch("https://github.com/inaridiy/webforai").then((res) => res.text());
|
|
140
|
+
const markdown = (0, import_html_to_markdown.htmlToMarkdown)(html2, { baseUrl: "https://www.npmjs.com/package/webforai" });
|
|
141
|
+
const original = await import("../../../README.md?raw");
|
|
142
|
+
const d = (0, import_fastest_levenshtein.distance)(markdown, original.default);
|
|
143
|
+
(0, import_vitest.expect)(d).lte(200);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
@@ -24,6 +24,7 @@ module.exports = __toCommonJS(html_to_mdast_exports);
|
|
|
24
24
|
var import_hast_util_from_html = require("hast-util-from-html");
|
|
25
25
|
var import_hast_util_to_mdast = require("hast-util-to-mdast");
|
|
26
26
|
var import_extract_hast = require("./extract-hast");
|
|
27
|
+
var import_extract_mdast = require("./extract-mdast");
|
|
27
28
|
var import_custom_a_handler = require("./mdast-handlers/custom-a-handler");
|
|
28
29
|
var import_custom_code_handler = require("./mdast-handlers/custom-code-handler");
|
|
29
30
|
var import_custom_div_handler = require("./mdast-handlers/custom-div-handler");
|
|
@@ -46,7 +47,8 @@ const htmlToMdast = (htmlOrHast, options) => {
|
|
|
46
47
|
br: import_empty_handler.emptyHandler
|
|
47
48
|
}
|
|
48
49
|
});
|
|
49
|
-
|
|
50
|
+
const extractedMdast = (0, import_extract_mdast.extractMdast)(mdast);
|
|
51
|
+
return extractedMdast;
|
|
50
52
|
};
|
|
51
53
|
// Annotate the CommonJS export names for ESM import in node:
|
|
52
54
|
0 && (module.exports = {
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var import_vitest = require("vitest");
|
|
3
|
+
var import_link_replacer = require("./link-replacer");
|
|
4
|
+
const markdown = `# Hello, world!
|
|
5
|
+
|
|
6
|
+
This is a paragraph.
|
|
7
|
+
|
|
8
|
+
[Example](/example.html)
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
[Absolute Link](https://www.google.com)
|
|
13
|
+
|
|
14
|
+
[Link with hash](/page#hash)
|
|
15
|
+
|
|
16
|
+
[Link with query](/page?query=string)`;
|
|
17
|
+
const expected = `# Hello, world!
|
|
18
|
+
|
|
19
|
+
This is a paragraph.
|
|
20
|
+
|
|
21
|
+
[Example](https://example.com/example.html)
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
[Absolute Link](https://www.google.com)
|
|
26
|
+
|
|
27
|
+
[Link with hash](https://example.com/page#hash)
|
|
28
|
+
|
|
29
|
+
[Link with query](https://example.com/page?query=string)`;
|
|
30
|
+
(0, import_vitest.describe)("linkReplacer", () => {
|
|
31
|
+
(0, import_vitest.it)("should replace relative links", () => {
|
|
32
|
+
const replaced = (0, import_link_replacer.linkReplacer)(markdown, "https://example.com");
|
|
33
|
+
(0, import_vitest.expect)(replaced).toEqual(expected);
|
|
34
|
+
});
|
|
35
|
+
(0, import_vitest.it)("should not replace absolute links", () => {
|
|
36
|
+
const replaced = (0, import_link_replacer.linkReplacer)("[Absolute Link](https://www.google.com)", "https://example.com");
|
|
37
|
+
(0, import_vitest.expect)(replaced).toEqual("[Absolute Link](https://www.google.com)");
|
|
38
|
+
});
|
|
39
|
+
(0, import_vitest.it)("should handle links with hashes", () => {
|
|
40
|
+
const replaced = (0, import_link_replacer.linkReplacer)("[Link with hash](/page#hash)", "https://example.com");
|
|
41
|
+
(0, import_vitest.expect)(replaced).toEqual("[Link with hash](https://example.com/page#hash)");
|
|
42
|
+
});
|
|
43
|
+
(0, import_vitest.it)("should handle links with query parameters", () => {
|
|
44
|
+
const replaced = (0, import_link_replacer.linkReplacer)("[Link with query](/page?query=string)", "https://example.com");
|
|
45
|
+
(0, import_vitest.expect)(replaced).toEqual("[Link with query](https://example.com/page?query=string)");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -25,7 +25,11 @@ var import_hast_util_to_mdast = require("hast-util-to-mdast");
|
|
|
25
25
|
var import_hast_util_to_string = require("hast-util-to-string");
|
|
26
26
|
const customAHandler = (options) => (state, node) => {
|
|
27
27
|
if (options?.asText) {
|
|
28
|
-
const
|
|
28
|
+
const text = (0, import_hast_util_to_string.toString)(node);
|
|
29
|
+
if (3 >= text.length) {
|
|
30
|
+
return void 0;
|
|
31
|
+
}
|
|
32
|
+
const link2 = { type: "text", value: text };
|
|
29
33
|
state.patch(node, link2);
|
|
30
34
|
return link2;
|
|
31
35
|
}
|
|
@@ -28,7 +28,8 @@ var import_mdast_util_to_markdown = require("mdast-util-to-markdown");
|
|
|
28
28
|
var import_link_replacer = require("./link-replacer");
|
|
29
29
|
var import_mdast_utils = require("./utils/mdast-utils");
|
|
30
30
|
const DEFAULT_MDAST_TO_MARKDOWN_OPTIONS = {
|
|
31
|
-
extensions: [(0, import_mdast_util_gfm.gfmToMarkdown)(), (0, import_mdast_util_math.mathToMarkdown)()]
|
|
31
|
+
extensions: [(0, import_mdast_util_gfm.gfmToMarkdown)(), (0, import_mdast_util_math.mathToMarkdown)()],
|
|
32
|
+
bullet: "-"
|
|
32
33
|
};
|
|
33
34
|
const mdastToMarkdown = (mdast, options) => {
|
|
34
35
|
const { baseUrl, ...toMarkdownOptions } = { ...DEFAULT_MDAST_TO_MARKDOWN_OPTIONS, ...options };
|
|
@@ -8,7 +8,7 @@ var UNLIKELY_ROLES = ["menu", "menubar", "complementary", "navigation", "alert",
|
|
|
8
8
|
var REGEXPS = {
|
|
9
9
|
hidden: /hidden|invisible|fallback-image/i,
|
|
10
10
|
byline: /byline|author|dateline|writtenby|p-author/i,
|
|
11
|
-
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore/i,
|
|
11
|
+
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore|uls-language-block/i,
|
|
12
12
|
okMaybeItsaCandidate: /and|article|body|column|content|main|shadow|code/i
|
|
13
13
|
};
|
|
14
14
|
var BODY_SELECTORS = ["article", "#article", ".article_body", ".article-body", "#content", ".entry", "main"];
|
|
@@ -67,18 +67,28 @@ var unlikelyElementFilter = (node) => {
|
|
|
67
67
|
return true;
|
|
68
68
|
}
|
|
69
69
|
const element = node;
|
|
70
|
-
const match = matchString(element);
|
|
71
70
|
if (["body", "article", "main", "section", "a"].includes(element.tagName)) {
|
|
72
71
|
return true;
|
|
73
72
|
}
|
|
74
73
|
if (hasAncestors(element, ["table", "code"], 3)) {
|
|
75
74
|
return true;
|
|
76
75
|
}
|
|
76
|
+
const match = matchString(element);
|
|
77
77
|
if (REGEXPS.unlikelyCandidates.test(match) && !REGEXPS.okMaybeItsaCandidate.test(match)) {
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
80
|
return true;
|
|
81
81
|
};
|
|
82
|
+
var isImageLink = (element) => {
|
|
83
|
+
const a = select("a", element);
|
|
84
|
+
const img = select("img", a);
|
|
85
|
+
if (!(a && img)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const imgFilename = img.properties.src?.toString().split("/").pop();
|
|
89
|
+
const hrefFilename = a.properties.href?.toString().split("/").pop();
|
|
90
|
+
return imgFilename === hrefFilename && imgFilename;
|
|
91
|
+
};
|
|
82
92
|
var removeEmptyFilter = (node) => {
|
|
83
93
|
if (node.type !== "element") {
|
|
84
94
|
return true;
|
|
@@ -87,6 +97,9 @@ var removeEmptyFilter = (node) => {
|
|
|
87
97
|
if (!PARAGRAPH_TAGS.includes(element.tagName)) {
|
|
88
98
|
return true;
|
|
89
99
|
}
|
|
100
|
+
if (isImageLink(element)) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
90
103
|
const text = hastToString(element);
|
|
91
104
|
if (text.length < 10) {
|
|
92
105
|
return false;
|
|
@@ -97,7 +110,7 @@ var readabilityExtractHast = (hast) => {
|
|
|
97
110
|
const lang = String(select("html", hast)?.properties.lang || tryGetLang(hast) || "en");
|
|
98
111
|
const body = select("body", hast) ?? hast;
|
|
99
112
|
const proxiedHast = parents(body);
|
|
100
|
-
|
|
113
|
+
const baseFilterd = filter(proxiedHast, (node) => {
|
|
101
114
|
if (!metadataFilter(node)) {
|
|
102
115
|
return false;
|
|
103
116
|
}
|
|
@@ -111,17 +124,7 @@ var readabilityExtractHast = (hast) => {
|
|
|
111
124
|
}
|
|
112
125
|
const baseText = hastToString(baseFilterd);
|
|
113
126
|
let minimalLength = lang in BASE_MINIMAL_LENGTH ? BASE_MINIMAL_LENGTH[lang] : 500;
|
|
114
|
-
if (baseText.length
|
|
115
|
-
const filterd = filter(baseFilterd, (node) => {
|
|
116
|
-
if (!unlikelyElementFilter(node)) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
return true;
|
|
120
|
-
});
|
|
121
|
-
if (filterd) {
|
|
122
|
-
baseFilterd = filterd;
|
|
123
|
-
}
|
|
124
|
-
} else {
|
|
127
|
+
if (baseText.length < minimalLength) {
|
|
125
128
|
minimalLength = Math.max(0, baseText.length - 200);
|
|
126
129
|
}
|
|
127
130
|
let bodyTree = baseFilterd;
|
|
@@ -146,6 +149,9 @@ var readabilityExtractHast = (hast) => {
|
|
|
146
149
|
if (!removeEmptyFilter(node)) {
|
|
147
150
|
return false;
|
|
148
151
|
}
|
|
152
|
+
if (!unlikelyElementFilter(node)) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
149
155
|
return true;
|
|
150
156
|
});
|
|
151
157
|
return finalTree;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/extract-hast/utils.ts
|
|
2
|
-
var matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}
|
|
2
|
+
var matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}`;
|
|
3
3
|
var classnames = (element) => {
|
|
4
4
|
if (Array.isArray(element.properties.className)) {
|
|
5
5
|
return element.properties.className;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/extract-mdast.ts
|
|
2
|
+
import { filter } from "unist-util-filter";
|
|
3
|
+
var DECLATION_TYPES = ["blockquote", "strong", "emphasis", "delete"];
|
|
4
|
+
var emptyDeclarationFilter = (node) => {
|
|
5
|
+
if (!DECLATION_TYPES.includes(node.type)) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
if (node.children.length === 0) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return true;
|
|
12
|
+
};
|
|
13
|
+
var extractMdast = (node) => {
|
|
14
|
+
const extracted = filter(node, (node2) => {
|
|
15
|
+
if (!emptyDeclarationFilter(node2)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
});
|
|
20
|
+
return extracted;
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
extractMdast
|
|
24
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// src/html-to-markdown.test.ts
|
|
2
|
+
import { distance } from "fastest-levenshtein";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { htmlToMarkdown } from "./html-to-markdown.js";
|
|
5
|
+
var html = `
|
|
6
|
+
<h1>Hello, world!</h1>
|
|
7
|
+
<p>This is a paragraph.</p>
|
|
8
|
+
<a href="/example.html">Example</a>
|
|
9
|
+
<img src="/example.jpg" alt="Example" />
|
|
10
|
+
<ul>
|
|
11
|
+
<li>Item 1</li>
|
|
12
|
+
<li>Item 2</li>
|
|
13
|
+
</ul>
|
|
14
|
+
`;
|
|
15
|
+
var expected = `# Hello, world!
|
|
16
|
+
|
|
17
|
+
This is a paragraph.
|
|
18
|
+
|
|
19
|
+
[Example](/example.html)
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
* Item 1
|
|
24
|
+
* Item 2
|
|
25
|
+
`;
|
|
26
|
+
var baseUrlReplaced = `# Hello, world!
|
|
27
|
+
|
|
28
|
+
This is a paragraph.
|
|
29
|
+
|
|
30
|
+
[Example](https://example.com/example.html)
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
* Item 1
|
|
35
|
+
* Item 2
|
|
36
|
+
`;
|
|
37
|
+
var linkAsText = `# Hello, world!
|
|
38
|
+
|
|
39
|
+
This is a paragraph.
|
|
40
|
+
|
|
41
|
+
Example
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
- Item 1
|
|
46
|
+
- Item 2
|
|
47
|
+
`;
|
|
48
|
+
var imageHidden = `# Hello, world!
|
|
49
|
+
|
|
50
|
+
This is a paragraph.
|
|
51
|
+
|
|
52
|
+
[Example](/example.html)
|
|
53
|
+
|
|
54
|
+
- Item 1
|
|
55
|
+
- Item 2
|
|
56
|
+
`;
|
|
57
|
+
var htmlTable = `
|
|
58
|
+
<table>
|
|
59
|
+
<tr>
|
|
60
|
+
<th>Header 1</th>
|
|
61
|
+
<th>Header 2</th>
|
|
62
|
+
</tr>
|
|
63
|
+
<tr>
|
|
64
|
+
<td>Cell 1</td>
|
|
65
|
+
<td>Cell 2</td>
|
|
66
|
+
</tr>
|
|
67
|
+
</table>
|
|
68
|
+
`;
|
|
69
|
+
var expectedTableMarkdown = `
|
|
70
|
+
| Header 1 | Header 2 |
|
|
71
|
+
| -------- | -------- |
|
|
72
|
+
| Cell 1 | Cell 2 |
|
|
73
|
+
`;
|
|
74
|
+
var expectedTableText = `Header 1 Header 2
|
|
75
|
+
Cell 1 Cell 2`;
|
|
76
|
+
describe("htmlToMarkdown", () => {
|
|
77
|
+
it("should convert HTML to Markdown", () => {
|
|
78
|
+
const markdown = htmlToMarkdown(html, { extractors: false });
|
|
79
|
+
const d = distance(markdown, expected);
|
|
80
|
+
expect(d).lte(5);
|
|
81
|
+
});
|
|
82
|
+
it("should convert HTML to Markdown with replaced base URL", () => {
|
|
83
|
+
const markdown = htmlToMarkdown(html, { baseUrl: "https://example.com", extractors: false });
|
|
84
|
+
const d = distance(markdown, baseUrlReplaced);
|
|
85
|
+
expect(d).lte(5);
|
|
86
|
+
});
|
|
87
|
+
it("should convert HTML to Markdown with links as text", () => {
|
|
88
|
+
const markdown = htmlToMarkdown(html, { linkAsText: true, extractors: false });
|
|
89
|
+
const d = distance(markdown, linkAsText);
|
|
90
|
+
expect(d).lte(5);
|
|
91
|
+
});
|
|
92
|
+
it("should convert HTML to Markdown with hidden images", () => {
|
|
93
|
+
const markdown = htmlToMarkdown(html, { hideImage: true, extractors: false });
|
|
94
|
+
const d = distance(markdown, imageHidden);
|
|
95
|
+
expect(d).lte(5);
|
|
96
|
+
});
|
|
97
|
+
it("should convert HTML table to Markdown table", () => {
|
|
98
|
+
const markdown = htmlToMarkdown(htmlTable, { extractors: false });
|
|
99
|
+
const d = distance(markdown, expectedTableMarkdown);
|
|
100
|
+
expect(d).lte(5);
|
|
101
|
+
});
|
|
102
|
+
it("should convert HTML table with table as text option", () => {
|
|
103
|
+
const markdown = htmlToMarkdown(htmlTable, { tableAsText: true, extractors: false });
|
|
104
|
+
const d = distance(markdown, expectedTableText);
|
|
105
|
+
expect(d).lte(10);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe("htmlToMarkdown E2E", () => {
|
|
109
|
+
it("should convert npm README to Markdown ", async () => {
|
|
110
|
+
const html2 = await fetch("https://www.npmjs.com/package/webforai").then((res) => res.text());
|
|
111
|
+
const markdown = htmlToMarkdown(html2, { baseUrl: "https://www.npmjs.com/package/webforai" });
|
|
112
|
+
const original = await import("../README.md?raw");
|
|
113
|
+
const d = distance(markdown, original.default);
|
|
114
|
+
expect(d).lte(400);
|
|
115
|
+
});
|
|
116
|
+
it("should convert GitHub README to Markdown ", async () => {
|
|
117
|
+
const html2 = await fetch("https://github.com/inaridiy/webforai").then((res) => res.text());
|
|
118
|
+
const markdown = htmlToMarkdown(html2, { baseUrl: "https://www.npmjs.com/package/webforai" });
|
|
119
|
+
const original = await import("../../../README.md?raw");
|
|
120
|
+
const d = distance(markdown, original.default);
|
|
121
|
+
expect(d).lte(200);
|
|
122
|
+
});
|
|
123
|
+
});
|
package/dist/html-to-mdast.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { fromHtml } from "hast-util-from-html";
|
|
3
3
|
import { toMdast } from "hast-util-to-mdast";
|
|
4
4
|
import { extractHast } from "./extract-hast/index.js";
|
|
5
|
+
import { extractMdast } from "./extract-mdast.js";
|
|
5
6
|
import { customAHandler } from "./mdast-handlers/custom-a-handler.js";
|
|
6
7
|
import { customCodeHandler } from "./mdast-handlers/custom-code-handler.js";
|
|
7
8
|
import { customDivHandler } from "./mdast-handlers/custom-div-handler.js";
|
|
@@ -24,7 +25,8 @@ var htmlToMdast = (htmlOrHast, options) => {
|
|
|
24
25
|
br: emptyHandler
|
|
25
26
|
}
|
|
26
27
|
});
|
|
27
|
-
|
|
28
|
+
const extractedMdast = extractMdast(mdast);
|
|
29
|
+
return extractedMdast;
|
|
28
30
|
};
|
|
29
31
|
export {
|
|
30
32
|
htmlToMdast
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// src/link-replacer.test.ts
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { linkReplacer } from "./link-replacer.js";
|
|
4
|
+
var markdown = `# Hello, world!
|
|
5
|
+
|
|
6
|
+
This is a paragraph.
|
|
7
|
+
|
|
8
|
+
[Example](/example.html)
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
[Absolute Link](https://www.google.com)
|
|
13
|
+
|
|
14
|
+
[Link with hash](/page#hash)
|
|
15
|
+
|
|
16
|
+
[Link with query](/page?query=string)`;
|
|
17
|
+
var expected = `# Hello, world!
|
|
18
|
+
|
|
19
|
+
This is a paragraph.
|
|
20
|
+
|
|
21
|
+
[Example](https://example.com/example.html)
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
[Absolute Link](https://www.google.com)
|
|
26
|
+
|
|
27
|
+
[Link with hash](https://example.com/page#hash)
|
|
28
|
+
|
|
29
|
+
[Link with query](https://example.com/page?query=string)`;
|
|
30
|
+
describe("linkReplacer", () => {
|
|
31
|
+
it("should replace relative links", () => {
|
|
32
|
+
const replaced = linkReplacer(markdown, "https://example.com");
|
|
33
|
+
expect(replaced).toEqual(expected);
|
|
34
|
+
});
|
|
35
|
+
it("should not replace absolute links", () => {
|
|
36
|
+
const replaced = linkReplacer("[Absolute Link](https://www.google.com)", "https://example.com");
|
|
37
|
+
expect(replaced).toEqual("[Absolute Link](https://www.google.com)");
|
|
38
|
+
});
|
|
39
|
+
it("should handle links with hashes", () => {
|
|
40
|
+
const replaced = linkReplacer("[Link with hash](/page#hash)", "https://example.com");
|
|
41
|
+
expect(replaced).toEqual("[Link with hash](https://example.com/page#hash)");
|
|
42
|
+
});
|
|
43
|
+
it("should handle links with query parameters", () => {
|
|
44
|
+
const replaced = linkReplacer("[Link with query](/page?query=string)", "https://example.com");
|
|
45
|
+
expect(replaced).toEqual("[Link with query](https://example.com/page?query=string)");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -3,7 +3,11 @@ import { defaultHandlers } from "hast-util-to-mdast";
|
|
|
3
3
|
import { toString as hastToString } from "hast-util-to-string";
|
|
4
4
|
var customAHandler = (options) => (state, node) => {
|
|
5
5
|
if (options?.asText) {
|
|
6
|
-
const
|
|
6
|
+
const text = hastToString(node);
|
|
7
|
+
if (3 >= text.length) {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
const link2 = { type: "text", value: text };
|
|
7
11
|
state.patch(node, link2);
|
|
8
12
|
return link2;
|
|
9
13
|
}
|
|
@@ -5,7 +5,8 @@ import { toMarkdown } from "mdast-util-to-markdown";
|
|
|
5
5
|
import { linkReplacer } from "./link-replacer.js";
|
|
6
6
|
import { warpRoot } from "./utils/mdast-utils.js";
|
|
7
7
|
var DEFAULT_MDAST_TO_MARKDOWN_OPTIONS = {
|
|
8
|
-
extensions: [gfmToMarkdown(), mathToMarkdown()]
|
|
8
|
+
extensions: [gfmToMarkdown(), mathToMarkdown()],
|
|
9
|
+
bullet: "-"
|
|
9
10
|
};
|
|
10
11
|
var mdastToMarkdown = (mdast, options) => {
|
|
11
12
|
const { baseUrl, ...toMarkdownOptions } = { ...DEFAULT_MDAST_TO_MARKDOWN_OPTIONS, ...options };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readability.js","sourceRoot":"","sources":["../../../src/extract-hast/readability.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAU9E,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAE5G,MAAM,OAAO,GAAG;IACf,MAAM,EAAE,kCAAkC;IAC1C,MAAM,EAAE,4CAA4C;IACpD,kBAAkB,EACjB,
|
|
1
|
+
{"version":3,"file":"readability.js","sourceRoot":"","sources":["../../../src/extract-hast/readability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/extract-hast/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC/C,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/extract-hast/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC/C,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC,UAAU,CAAC,SAAqB,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,EAAE;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,QAAkB,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IAC/E,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-mdast.js","sourceRoot":"","sources":["../../src/extract-mdast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEvE,MAAM,sBAAsB,GAAG,CAAC,IAAW,EAAE,EAAE;IAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAK,IAAe,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAW,EAAE,EAAE;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QACvC,IAAI,CAAC,sBAAsB,CAAC,IAAa,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,SAAkB,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-to-mdast.js","sourceRoot":"","sources":["../../src/html-to-mdast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"html-to-mdast.js","sourceRoot":"","sources":["../../src/html-to-mdast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAmB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAgB5D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAyB,EAAE,OAA4B,EAAS,EAAE;IAC7F,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEpG,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAE;QACpC,QAAQ,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,gBAAgB;YACrB,GAAG,EAAE,iBAAiB;YACtB,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAClD,GAAG,EAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACxD,KAAK,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAC3D,EAAE,EAAE,YAAY;SAChB;KACD,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAE3C,OAAO,cAAc,CAAC;AACvB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-a-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-a-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAC1B,CAAC,OAA8B,EAAU,EAAE,CAC3C,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"custom-a-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-a-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,MAAM,cAAc,GAC1B,CAAC,OAA8B,EAAU,EAAE,CAC3C,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;QACpD,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdast-to-markdown.js","sourceRoot":"","sources":["../../src/mdast-to-markdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAqC,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAY/C;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAA2B;IACxE,UAAU,EAAE,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mdast-to-markdown.js","sourceRoot":"","sources":["../../src/mdast-to-markdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAqC,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAY/C;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAA2B;IACxE,UAAU,EAAE,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,CAAC;IAC/C,MAAM,EAAE,GAAG;CACX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAA4B,EAAE,OAAgC,EAAU,EAAE;IACzG,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,GAAG,EAAE,GAAG,iCAAiC,EAAE,GAAG,OAAO,EAAE,CAAC;IAE/F,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAE9D,IAAI,OAAO,EAAE,CAAC;QACb,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webforai",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "A library that provides a web interface for AI",
|
|
5
5
|
"author": "inaridiy",
|
|
6
6
|
"license": "MIT",
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
+
"fastest-levenshtein": "^1.0.16",
|
|
77
78
|
"hast-util-from-html": "^2.0.1",
|
|
78
79
|
"hast-util-select": "^6.0.1",
|
|
79
80
|
"hast-util-to-html": "^9.0.0",
|