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 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
- - [https://webforai.inaridiy.workers.dev/?url=https://www.npmjs.com/package/webforai](https://webforai.inaridiy.workers.dev/?url=https://www.npmjs.com/package/webforai)
19
- - [https://webforai.inaridiy.workers.dev/?html=%3Ch1%3EHello%20World%3C/h1%3E](https://webforai.inaridiy.workers.dev/?html=%3Ch1%3EHello%20World%3C/h1%3E)
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, { solveLinks: url });
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
- let baseFilterd = (0, import_unist_util_filter.filter)(proxiedHast, (node) => {
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 > minimalLength) {
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
+ ![Example](/example.jpg)
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
+ ![Example](https://example.com/example.jpg)
55
+
56
+ * Item 1
57
+ * Item 2
58
+ `;
59
+ const linkAsText = `# Hello, world!
60
+
61
+ This is a paragraph.
62
+
63
+ Example
64
+
65
+ ![Example](/example.jpg)
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
- return mdast;
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
+ ![Example](/example.jpg)
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
+ ![Example](https://example.com/example.jpg)
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 link2 = { type: "text", value: (0, import_hast_util_to_string.toString)(node) };
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
- let baseFilterd = filter(proxiedHast, (node) => {
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 > minimalLength) {
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
+ ![Example](/example.jpg)
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
+ ![Example](https://example.com/example.jpg)
33
+
34
+ * Item 1
35
+ * Item 2
36
+ `;
37
+ var linkAsText = `# Hello, world!
38
+
39
+ This is a paragraph.
40
+
41
+ Example
42
+
43
+ ![Example](/example.jpg)
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
+ });
@@ -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
- return mdast;
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
+ ![Example](/example.jpg)
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
+ ![Example](https://example.com/example.jpg)
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 link2 = { type: "text", value: hastToString(node) };
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":"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"}
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,IAAI,CAAC;AAElF,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"}
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,2 @@
1
+ import type { Nodes as Mdast } from "mdast";
2
+ export declare const extractMdast: (node: Mdast) => Mdast;
@@ -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":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAmB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,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,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
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,YAAY,CAAC,IAAI,CAAC,EAAW,CAAC;QAClE,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
+ {"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;CAC/C,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"}
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.0",
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",