webforai 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +972 -213
- package/dist/cjs/cli/bin.js +33 -0
- package/dist/cjs/cli/commands/webforai/index.js +86 -0
- package/dist/cjs/cli/commands/webforai/loadHtml.js +93 -0
- package/dist/cjs/cli/constants.js +34 -0
- package/dist/cjs/cli/helpers/assertContinue.js +34 -0
- package/dist/cjs/cli/helpers/inputOutputPath.js +89 -0
- package/dist/cjs/cli/helpers/inputSourcePath.js +64 -0
- package/dist/cjs/cli/helpers/selectExtractMode.js +39 -0
- package/dist/cjs/cli/helpers/selectLoader.js +44 -0
- package/dist/cjs/cli/utils.js +89 -0
- package/dist/cjs/extract-hast/index.js +4 -3
- package/dist/cjs/extract-hast/readability.js +28 -61
- package/dist/cjs/extract-hast/strongly.js +2 -1
- package/dist/cjs/extract-hast/utils.js +0 -15
- package/dist/cjs/html-to-mdast.js +6 -6
- package/dist/cjs/link-replacer.js +10 -5
- package/dist/cjs/loaders/playwright.js +36 -7
- package/dist/cjs/mdast-handlers/custom-br-handler.js +31 -0
- package/dist/cjs/mdast-to-markdown.js +1 -1
- package/dist/cjs/utils/hast-utils.js +71 -0
- package/dist/cli/bin.js +11 -0
- package/dist/cli/commands/webforai/index.js +53 -0
- package/dist/cli/commands/webforai/loadHtml.js +60 -0
- package/dist/cli/constants.js +9 -0
- package/dist/cli/helpers/assertContinue.js +11 -0
- package/dist/cli/helpers/inputOutputPath.js +56 -0
- package/dist/cli/helpers/inputSourcePath.js +31 -0
- package/dist/cli/helpers/selectExtractMode.js +16 -0
- package/dist/cli/helpers/selectLoader.js +21 -0
- package/dist/cli/utils.js +52 -0
- package/dist/extract-hast/index.js +4 -3
- package/dist/extract-hast/readability.js +29 -62
- package/dist/extract-hast/strongly.js +2 -1
- package/dist/extract-hast/utils.js +0 -14
- package/dist/html-to-mdast.js +6 -6
- package/dist/link-replacer.js +10 -5
- package/dist/loaders/playwright.js +36 -7
- package/dist/mdast-handlers/custom-br-handler.js +8 -0
- package/dist/mdast-to-markdown.js +1 -1
- package/dist/types/cli/bin.js.map +1 -0
- package/dist/types/cli/commands/webforai/index.d.ts +6 -0
- package/dist/types/cli/commands/webforai/index.js.map +1 -0
- package/dist/types/cli/commands/webforai/loadHtml.d.ts +3 -0
- package/dist/types/cli/commands/webforai/loadHtml.js.map +1 -0
- package/dist/types/cli/constants.d.ts +5 -0
- package/dist/types/cli/constants.js.map +1 -0
- package/dist/types/cli/helpers/assertContinue.d.ts +1 -0
- package/dist/types/cli/helpers/assertContinue.js.map +1 -0
- package/dist/types/cli/helpers/inputOutputPath.d.ts +1 -0
- package/dist/types/cli/helpers/inputOutputPath.js.map +1 -0
- package/dist/types/cli/helpers/inputSourcePath.d.ts +1 -0
- package/dist/types/cli/helpers/inputSourcePath.js.map +1 -0
- package/dist/types/cli/helpers/selectExtractMode.d.ts +1 -0
- package/dist/types/cli/helpers/selectExtractMode.js.map +1 -0
- package/dist/types/cli/helpers/selectLoader.d.ts +1 -0
- package/dist/types/cli/helpers/selectLoader.js.map +1 -0
- package/dist/types/cli/utils.d.ts +32 -0
- package/dist/types/cli/utils.js.map +1 -0
- package/dist/types/extract-hast/index.d.ts +9 -4
- package/dist/types/extract-hast/index.js.map +1 -1
- package/dist/types/extract-hast/readability.d.ts +2 -1
- package/dist/types/extract-hast/readability.js.map +1 -1
- package/dist/types/extract-hast/strongly.d.ts +2 -1
- package/dist/types/extract-hast/strongly.js.map +1 -1
- package/dist/types/extract-hast/utils.d.ts +0 -1
- package/dist/types/extract-hast/utils.js.map +1 -1
- package/dist/types/html-to-mdast.d.ts +4 -0
- package/dist/types/html-to-mdast.js.map +1 -1
- package/dist/types/link-replacer.d.ts +1 -1
- package/dist/types/link-replacer.js.map +1 -1
- package/dist/types/loaders/playwright.d.ts +8 -2
- package/dist/types/loaders/playwright.js.map +1 -1
- package/dist/types/mdast-handlers/custom-br-handler.d.ts +2 -0
- package/dist/types/mdast-handlers/custom-br-handler.js.map +1 -0
- package/dist/types/mdast-to-markdown.js.map +1 -1
- package/dist/types/utils/hast-utils.d.ts +4 -0
- package/dist/types/utils/hast-utils.js.map +1 -0
- package/dist/utils/hast-utils.js +46 -0
- package/package.json +18 -17
- package/dist/cjs/bin.js +0 -254
- package/dist/cjs/html-to-markdown.test.js +0 -146
- package/dist/cjs/link-replacer.test.js +0 -47
- package/dist/cjs/loaders/fetch.test.js +0 -9
- package/dist/cjs/loaders/playwright.test.js +0 -17
- package/dist/cjs/loaders/puppeteer.test.js +0 -17
- package/dist/cjs/utils/bin-utils.js +0 -124
- package/dist/html-to-markdown.test.js +0 -124
- package/dist/link-replacer.test.js +0 -47
- package/dist/loaders/fetch.test.js +0 -9
- package/dist/loaders/playwright.test.js +0 -17
- package/dist/loaders/puppeteer.test.js +0 -17
- package/dist/types/bin.js.map +0 -1
- package/dist/types/utils/bin-utils.d.ts +0 -5
- package/dist/types/utils/bin-utils.js.map +0 -1
- package/dist/utils/bin-utils.js +0 -87
- /package/dist/types/{bin.d.ts → cli/bin.d.ts} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/cli/helpers/selectExtractMode.ts
|
|
2
|
+
import { select } from "@clack/prompts";
|
|
3
|
+
import { MODES } from "../constants.js";
|
|
4
|
+
import { assertContinue } from "./assertContinue.js";
|
|
5
|
+
var selectExtractMode = async () => {
|
|
6
|
+
const result = await select({
|
|
7
|
+
message: "Select processing mode:",
|
|
8
|
+
options: MODES.map((mode) => ({ value: mode, label: mode })),
|
|
9
|
+
initialValue: MODES[0]
|
|
10
|
+
});
|
|
11
|
+
assertContinue(result);
|
|
12
|
+
return result;
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
selectExtractMode
|
|
16
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/cli/helpers/selectLoader.ts
|
|
2
|
+
import { select } from "@clack/prompts";
|
|
3
|
+
import { LOADERS } from "../constants.js";
|
|
4
|
+
import { assertContinue } from "./assertContinue.js";
|
|
5
|
+
var loadersHint = {
|
|
6
|
+
fetch: "Fetch HTML content from the given URL",
|
|
7
|
+
playwright: "Retrieve HTML content after rendering using Playwright; Playwright must be installed in advance.",
|
|
8
|
+
puppeteer: "Retrieve HTML content after rendering using Puppeteer; Puppeteer must be installed in advance."
|
|
9
|
+
};
|
|
10
|
+
var selectLoader = async () => {
|
|
11
|
+
const result = await select({
|
|
12
|
+
message: "Select loader:",
|
|
13
|
+
initialValue: "fetch",
|
|
14
|
+
options: LOADERS.map((mode) => ({ value: mode, label: mode, hint: loadersHint[mode] || "" }))
|
|
15
|
+
});
|
|
16
|
+
assertContinue(result);
|
|
17
|
+
return result;
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
selectLoader
|
|
21
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/cli/utils.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
var isUrl = (maybeUrl) => {
|
|
5
|
+
try {
|
|
6
|
+
new URL(maybeUrl);
|
|
7
|
+
return true;
|
|
8
|
+
} catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
function changeFileExtension(filePath, newExtension) {
|
|
13
|
+
const parsed = path.parse(filePath);
|
|
14
|
+
const ext = newExtension.startsWith(".") ? newExtension : `.${newExtension}`;
|
|
15
|
+
return path.format({ ...parsed, ext });
|
|
16
|
+
}
|
|
17
|
+
function urlToFilename(url) {
|
|
18
|
+
try {
|
|
19
|
+
const urlObj = new URL(url);
|
|
20
|
+
const hostname = urlObj.hostname.startsWith("www.") ? urlObj.hostname.slice(4) : urlObj.hostname;
|
|
21
|
+
const domainParts = hostname.split(".").slice(-2).join("-");
|
|
22
|
+
const pathParts = urlObj.pathname.split("/").filter(Boolean);
|
|
23
|
+
const relevantPathParts = pathParts.slice(-2).map(decodeURIComponent).join("-");
|
|
24
|
+
let filename = [domainParts, relevantPathParts].filter(Boolean).join("-");
|
|
25
|
+
filename = filename.toLowerCase().replace(/[<>:"/\\|?*\x00-\x1F]/g, "").replace(/[\s.]+/g, "-").replace(/^-+|-+$/g, "");
|
|
26
|
+
return filename || "output";
|
|
27
|
+
} catch {
|
|
28
|
+
return "output";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
var sourcePathToOutputPath = (sourcePath) => isUrl(sourcePath) ? `${urlToFilename(sourcePath)}.md` : changeFileExtension(sourcePath, "md");
|
|
32
|
+
function getNextAvailableFilePath(filePath) {
|
|
33
|
+
const parsed = path.parse(filePath);
|
|
34
|
+
const dir = parsed.dir;
|
|
35
|
+
const ext = parsed.ext;
|
|
36
|
+
const baseName = parsed.name.replace(/_\d+$/, "");
|
|
37
|
+
const match = parsed.name.match(/_(\d+)$/);
|
|
38
|
+
let counter = match ? Number(match[1]) + 1 : 1;
|
|
39
|
+
let newPath = path.join(dir, `${baseName}_${counter}${ext}`);
|
|
40
|
+
while (fs.existsSync(newPath)) {
|
|
41
|
+
counter++;
|
|
42
|
+
newPath = path.join(dir, `${baseName}_${counter}${ext}`);
|
|
43
|
+
}
|
|
44
|
+
return newPath;
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
changeFileExtension,
|
|
48
|
+
getNextAvailableFilePath,
|
|
49
|
+
isUrl,
|
|
50
|
+
sourcePathToOutputPath,
|
|
51
|
+
urlToFilename
|
|
52
|
+
};
|
|
@@ -6,17 +6,18 @@ var PRESET_EXTRACT_HAST = {
|
|
|
6
6
|
readability: readabilityExtractHast
|
|
7
7
|
};
|
|
8
8
|
var DEFAULT_EXTRACT_HAST = ["readability"];
|
|
9
|
-
var extractHast = (
|
|
9
|
+
var extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
10
|
+
const { hast, lang } = params;
|
|
10
11
|
const _extractors = Array.isArray(extractors) ? extractors : [extractors];
|
|
11
12
|
const extracted = _extractors.reduce((acc, extractor) => {
|
|
12
13
|
if (extractor === false) {
|
|
13
14
|
return acc;
|
|
14
15
|
}
|
|
15
16
|
if (typeof extractor === "string" && extractor in PRESET_EXTRACT_HAST) {
|
|
16
|
-
return PRESET_EXTRACT_HAST[extractor](acc);
|
|
17
|
+
return PRESET_EXTRACT_HAST[extractor]({ hast: acc, lang });
|
|
17
18
|
}
|
|
18
19
|
if (typeof extractor === "function") {
|
|
19
|
-
return extractor(acc);
|
|
20
|
+
return extractor({ hast: acc, lang });
|
|
20
21
|
}
|
|
21
22
|
throw new Error(`Invalid extractor: ${extractor}`);
|
|
22
23
|
}, hast) || hast;
|
|
@@ -2,41 +2,30 @@
|
|
|
2
2
|
import { select, selectAll } from "hast-util-select";
|
|
3
3
|
import { toString as hastToString } from "hast-util-to-string";
|
|
4
4
|
import { filter } from "unist-util-filter";
|
|
5
|
-
import { classnames,
|
|
5
|
+
import { classnames, isStrInclude, matchString } from "./utils.js";
|
|
6
6
|
var UNLIKELY_ROLES = ["menu", "menubar", "complementary", "navigation", "alert", "alertdialog", "dialog"];
|
|
7
7
|
var REGEXPS = {
|
|
8
8
|
hidden: /hidden|invisible|fallback-image/i,
|
|
9
9
|
byline: /byline|author|dateline|writtenby|p-author/i,
|
|
10
10
|
specialUnlikelyCandidates: /frb-|uls-menu|language-link/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|tooltip|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|avatar/i,
|
|
12
12
|
okMaybeItsaCandidate: /and|article|body|column|content|main|shadow|code/i
|
|
13
13
|
};
|
|
14
|
-
var BODY_SELECTORS = ["article", "#article", ".article_body", ".article-body", "#content", ".entry"
|
|
15
|
-
var PARAGRAPH_TAGS = ["p", "div", "section", "article", "main", "ul", "ol", "li"];
|
|
14
|
+
var BODY_SELECTORS = ["article", "#article", ".article_body", ".article-body", "#content", ".entry"];
|
|
15
|
+
var PARAGRAPH_TAGS = ["a", "p", "div", "section", "article", "main", "ul", "ol", "li"];
|
|
16
16
|
var BASE_MINIMAL_LENGTH = {
|
|
17
17
|
ja: 200,
|
|
18
18
|
en: 500
|
|
19
19
|
};
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
const element = node;
|
|
25
|
-
if (element.tagName !== "html") {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
const langAttr = element.properties.lang || element.properties["xml:lang"];
|
|
29
|
-
if (langAttr) {
|
|
30
|
-
return langAttr;
|
|
31
|
-
}
|
|
20
|
+
var metadataFilter = (node) => {
|
|
21
|
+
return !(["comment", "doctype"].includes(node.type) || node.type === "element" && ["script", "style", "link", "meta", "noscript", "svg", "title"].includes(node.tagName));
|
|
32
22
|
};
|
|
33
|
-
var metadataFilter = (node) => !["comment", "doctype"].includes(node.type);
|
|
34
23
|
var universalElementFilter = (node) => {
|
|
35
24
|
if (node.type !== "element") {
|
|
36
25
|
return true;
|
|
37
26
|
}
|
|
38
27
|
const element = node;
|
|
39
|
-
if (["
|
|
28
|
+
if (["aside", "nav"].includes(element.tagName)) {
|
|
40
29
|
return false;
|
|
41
30
|
}
|
|
42
31
|
if (["hidden", "aria-hidden"].some((key) => element.properties[key])) {
|
|
@@ -67,10 +56,7 @@ var unlikelyElementFilter = (node) => {
|
|
|
67
56
|
return true;
|
|
68
57
|
}
|
|
69
58
|
const element = node;
|
|
70
|
-
if (["body", "article", "main", "section", "
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
if (hasAncestors(element, ["table", "code"], 3)) {
|
|
59
|
+
if (["body", "article", "main", "section", "h1", "h2", "h3", "h4", "h5", "h6", "p"].includes(element.tagName)) {
|
|
74
60
|
return true;
|
|
75
61
|
}
|
|
76
62
|
const match = matchString(element);
|
|
@@ -82,55 +68,36 @@ var unlikelyElementFilter = (node) => {
|
|
|
82
68
|
}
|
|
83
69
|
return true;
|
|
84
70
|
};
|
|
85
|
-
var
|
|
86
|
-
const a = select("a", element);
|
|
87
|
-
const img = select("img", a);
|
|
88
|
-
if (!(a && img)) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
const imgFilename = img.properties.src?.toString().split("/").pop();
|
|
92
|
-
const hrefFilename = a.properties.href?.toString().split("/").pop();
|
|
93
|
-
return imgFilename === hrefFilename && imgFilename;
|
|
94
|
-
};
|
|
95
|
-
var removeEmptyFilter = (node) => {
|
|
71
|
+
var removeEmptyFilter = (node, _lang) => {
|
|
96
72
|
if (node.type !== "element") {
|
|
97
73
|
return true;
|
|
98
74
|
}
|
|
99
75
|
const element = node;
|
|
100
|
-
if (
|
|
76
|
+
if (PARAGRAPH_TAGS.includes(element.tagName)) {
|
|
101
77
|
return true;
|
|
102
78
|
}
|
|
103
|
-
if (
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
const text = hastToString(element);
|
|
107
|
-
if (text.length < 10) {
|
|
79
|
+
if (element.tagName === "img" && !element.properties.src) {
|
|
108
80
|
return false;
|
|
109
81
|
}
|
|
110
82
|
return true;
|
|
111
83
|
};
|
|
112
|
-
var readabilityExtractHast = (
|
|
113
|
-
const lang =
|
|
84
|
+
var readabilityExtractHast = (params) => {
|
|
85
|
+
const { hast, lang = "en" } = params;
|
|
114
86
|
const body = select("body", hast) ?? hast;
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
return true;
|
|
124
|
-
});
|
|
125
|
-
if (!baseFilterd) {
|
|
126
|
-
return { type: "root", children: [] };
|
|
127
|
-
}
|
|
128
|
-
const baseFilterdText = hastToString(baseFilterd);
|
|
129
|
-
let [baseTree, baseText] = baseFilterdText.length > bodyText.length / 3 || baseFilterdText.length > 5e3 ? [baseFilterd, baseFilterdText] : [body, bodyText];
|
|
87
|
+
const metadataFilteredHast = filter(body, (node) => metadataFilter(node));
|
|
88
|
+
const metadataFilteredHastText = metadataFilteredHast && hastToString(metadataFilteredHast);
|
|
89
|
+
if (!(metadataFilteredHast && metadataFilteredHastText)) {
|
|
90
|
+
return body;
|
|
91
|
+
}
|
|
92
|
+
const baseFilterd = filter(metadataFilteredHast, (node) => universalElementFilter(node));
|
|
93
|
+
const baseFilterdText = baseFilterd ? hastToString(baseFilterd) : "";
|
|
94
|
+
const [baseTree, baseText] = baseFilterdText.length > metadataFilteredHastText.length / 3 || baseFilterdText.length > 5e3 ? [baseFilterd, baseFilterdText] : [metadataFilteredHast, metadataFilteredHastText];
|
|
130
95
|
let minimalLength = lang in BASE_MINIMAL_LENGTH ? BASE_MINIMAL_LENGTH[lang] : 500;
|
|
131
96
|
if (baseText.length < minimalLength) {
|
|
132
97
|
minimalLength = Math.max(0, baseText.length - 200);
|
|
133
98
|
}
|
|
99
|
+
let extractedTree = baseTree;
|
|
100
|
+
let extractedText = baseText;
|
|
134
101
|
for (const selector of BODY_SELECTORS) {
|
|
135
102
|
const content = { type: "root", children: selectAll(selector, baseFilterd) };
|
|
136
103
|
const contentText = hastToString(content);
|
|
@@ -139,18 +106,18 @@ var readabilityExtractHast = (hast) => {
|
|
|
139
106
|
}
|
|
140
107
|
const links = selectAll("a", content);
|
|
141
108
|
const linkText = links.map((link) => hastToString(link)).join("");
|
|
142
|
-
const linkDensity = linkText.length /
|
|
109
|
+
const linkDensity = linkText.length / contentText.length;
|
|
143
110
|
if (linkDensity > 0.4) {
|
|
144
111
|
continue;
|
|
145
112
|
}
|
|
146
113
|
if (contentText.length > minimalLength) {
|
|
147
|
-
|
|
148
|
-
|
|
114
|
+
extractedTree = content;
|
|
115
|
+
extractedText = contentText;
|
|
149
116
|
break;
|
|
150
117
|
}
|
|
151
118
|
}
|
|
152
|
-
const finalFilteredTree = filter(
|
|
153
|
-
if (!removeEmptyFilter(node)) {
|
|
119
|
+
const finalFilteredTree = filter(extractedTree, (node) => {
|
|
120
|
+
if (!removeEmptyFilter(node, lang)) {
|
|
154
121
|
return false;
|
|
155
122
|
}
|
|
156
123
|
if (!unlikelyElementFilter(node)) {
|
|
@@ -158,7 +125,7 @@ var readabilityExtractHast = (hast) => {
|
|
|
158
125
|
}
|
|
159
126
|
return true;
|
|
160
127
|
});
|
|
161
|
-
const finalTree = hastToString(finalFilteredTree).length >
|
|
128
|
+
const finalTree = hastToString(finalFilteredTree).length > extractedText.length / 3 ? finalFilteredTree : extractedTree;
|
|
162
129
|
return finalTree;
|
|
163
130
|
};
|
|
164
131
|
export {
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { select } from "hast-util-select";
|
|
3
3
|
import { filter } from "unist-util-filter";
|
|
4
4
|
var REMOVE_REGEX = /fallback|icon|header|nav|speechify-ignore|assist|-ad-|banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|assist|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i;
|
|
5
|
-
var stronglyExtractHast = (
|
|
5
|
+
var stronglyExtractHast = (params) => {
|
|
6
|
+
const { hast } = params;
|
|
6
7
|
const selectors = ["article", "#article", "#content", "main", "div.container"];
|
|
7
8
|
let selectedElement = hast;
|
|
8
9
|
for (const selector of selectors) {
|
|
@@ -12,22 +12,8 @@ var isStrInclude = (value, match) => {
|
|
|
12
12
|
}
|
|
13
13
|
return false;
|
|
14
14
|
};
|
|
15
|
-
var hasAncestors = (element, tagNames, depth = 3) => {
|
|
16
|
-
let parent = element.parent;
|
|
17
|
-
for (let i = 0; i < depth; i++) {
|
|
18
|
-
if (!parent || parent.type !== "element") {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
if (tagNames.includes(parent.tagName)) {
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
parent = parent.parent;
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
27
|
-
};
|
|
28
15
|
export {
|
|
29
16
|
classnames,
|
|
30
|
-
hasAncestors,
|
|
31
17
|
isStrInclude,
|
|
32
18
|
matchString
|
|
33
19
|
};
|
package/dist/html-to-mdast.js
CHANGED
|
@@ -8,12 +8,13 @@ import { customCodeHandler } from "./mdast-handlers/custom-code-handler.js";
|
|
|
8
8
|
import { customDivHandler } from "./mdast-handlers/custom-div-handler.js";
|
|
9
9
|
import { customImgHandler } from "./mdast-handlers/custom-img-handler.js";
|
|
10
10
|
import { customTableHandler } from "./mdast-handlers/custom-table-handler.js";
|
|
11
|
-
import { emptyHandler } from "./mdast-handlers/empty-handler.js";
|
|
12
11
|
import { mathHandler } from "./mdast-handlers/math-handler.js";
|
|
12
|
+
import { getLangFromHast, getLangFromStr, getUrlFromHast } from "./utils/hast-utils.js";
|
|
13
13
|
var htmlToMdast = (htmlOrHast, options) => {
|
|
14
|
-
const { extractors } = options || {};
|
|
15
|
-
const hast = typeof htmlOrHast === "string" ? fromHtml(htmlOrHast, { fragment: true }) : htmlOrHast;
|
|
16
|
-
const
|
|
14
|
+
const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
|
|
15
|
+
const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || getLangFromStr(htmlOrHast), fromHtml(htmlOrHast, { fragment: true })] : [defaultLang || getLangFromHast(htmlOrHast), htmlOrHast];
|
|
16
|
+
const url = defaultUrl || getUrlFromHast(hast);
|
|
17
|
+
const extractedHast = extractHast({ hast, lang, url }, extractors);
|
|
17
18
|
const mdast = toMdast(extractedHast, {
|
|
18
19
|
handlers: {
|
|
19
20
|
math: mathHandler,
|
|
@@ -21,8 +22,7 @@ var htmlToMdast = (htmlOrHast, options) => {
|
|
|
21
22
|
pre: customCodeHandler,
|
|
22
23
|
a: customAHandler({ asText: options?.linkAsText }),
|
|
23
24
|
img: customImgHandler({ hideImage: options?.hideImage }),
|
|
24
|
-
table: customTableHandler({ asText: options?.tableAsText })
|
|
25
|
-
br: emptyHandler
|
|
25
|
+
table: customTableHandler({ asText: options?.tableAsText })
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
28
|
const extractedMdast = extractMdast(mdast);
|
package/dist/link-replacer.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
// src/link-replacer.ts
|
|
2
|
-
var linkReplacer = (markdown,
|
|
3
|
-
const regex = /(!?\[.*?\]\()(
|
|
4
|
-
return markdown.replace(regex, (match, pre,
|
|
5
|
-
if (
|
|
2
|
+
var linkReplacer = (markdown, base) => {
|
|
3
|
+
const regex = /(!?\[.*?\]\()([^)\s]+)(\))/g;
|
|
4
|
+
return markdown.replace(regex, (match, pre, url, post) => {
|
|
5
|
+
if (/^(https?:|#)/.test(url)) {
|
|
6
|
+
return match;
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const absoluteUrl = new URL(url, base).href;
|
|
10
|
+
return `${pre}${absoluteUrl}${post}`;
|
|
11
|
+
} catch {
|
|
6
12
|
return match;
|
|
7
13
|
}
|
|
8
|
-
return `${pre}${new URL(thisUrl, link).href}${post}`;
|
|
9
14
|
});
|
|
10
15
|
};
|
|
11
16
|
export {
|
|
@@ -1,13 +1,42 @@
|
|
|
1
1
|
// src/loaders/playwright.ts
|
|
2
|
-
import { chromium } from "playwright";
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { chromium, devices } from "playwright-core";
|
|
3
|
+
var SUPER_BYPASS_DEVICE = {
|
|
4
|
+
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
|
|
5
|
+
viewport: { width: 1920, height: 1080 },
|
|
6
|
+
deviceScaleFactor: 1,
|
|
7
|
+
hasTouch: false,
|
|
8
|
+
isMobile: false,
|
|
9
|
+
javaScriptEnabled: true,
|
|
10
|
+
locale: "en-US",
|
|
11
|
+
timezoneId: "America/New_York"
|
|
12
|
+
};
|
|
13
|
+
var loadHtml = async (url, options) => {
|
|
14
|
+
const { browser, waitUntil, timeout, superBypassMode } = options ?? {};
|
|
15
|
+
const _browser = browser ?? await chromium.launch({ headless: true });
|
|
16
|
+
const context = await _browser.newContext(superBypassMode ? SUPER_BYPASS_DEVICE : devices["Desktop Chrome"]);
|
|
17
|
+
if (superBypassMode) {
|
|
18
|
+
await context.addInitScript(() => {
|
|
19
|
+
Object.defineProperty(navigator, "webdriver", { get: () => void 0 });
|
|
20
|
+
Object.defineProperty(navigator, "languages", { get: () => ["en-US", "en"] });
|
|
21
|
+
Object.defineProperty(navigator, "plugins", { get: () => [1, 2, 3, 4, 5] });
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const page = await context.newPage();
|
|
25
|
+
if (superBypassMode) {
|
|
26
|
+
await page.route("**/*.js", (route) => {
|
|
27
|
+
if (route.request().url().includes("captcha-delivery")) {
|
|
28
|
+
return route.abort();
|
|
29
|
+
}
|
|
30
|
+
return route.continue();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
await page.goto(url, { waitUntil: waitUntil ?? "load", timeout });
|
|
7
34
|
const html = await page.content();
|
|
8
35
|
await page.close();
|
|
9
|
-
if (
|
|
10
|
-
await
|
|
36
|
+
if (browser) {
|
|
37
|
+
await context.close();
|
|
38
|
+
} else {
|
|
39
|
+
await _browser.close();
|
|
11
40
|
}
|
|
12
41
|
return html;
|
|
13
42
|
};
|
|
@@ -10,7 +10,7 @@ var DEFAULT_MDAST_TO_MARKDOWN_OPTIONS = {
|
|
|
10
10
|
};
|
|
11
11
|
var mdastToMarkdown = (mdast, options) => {
|
|
12
12
|
const { baseUrl, ...toMarkdownOptions } = { ...DEFAULT_MDAST_TO_MARKDOWN_OPTIONS, ...options };
|
|
13
|
-
let markdown = toMarkdown(warpRoot(mdast), toMarkdownOptions);
|
|
13
|
+
let markdown = toMarkdown(warpRoot(mdast), toMarkdownOptions).replace(/\*\*\*\*/g, "");
|
|
14
14
|
if (baseUrl) {
|
|
15
15
|
markdown = linkReplacer(markdown, baseUrl);
|
|
16
16
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../../src/cli/bin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO;KACL,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AAE9E,OAAO;KACL,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACpE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KACxE,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;KAC3D,MAAM,CAAC,eAAe,CAAC,CAAC;AAE1B,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,wBAAwB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAEjE,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/webforai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadHtml.js","sourceRoot":"","sources":["../../../../../src/cli/commands/webforai/loadHtml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,YAAY,CAAU,CAAC;AAGxD,MAAM,CAAC,MAAM,KAAK,GAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function assertContinue<T>(message: T | symbol, cancelMessage?: string): asserts message is T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertContinue.js","sourceRoot":"","sources":["../../../../src/cli/helpers/assertContinue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,cAAc,CAAI,OAAmB,EAAE,aAAa,GAAG,WAAW;IACjF,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,aAAa,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const inputOutputPath: (sourcePath: string) => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputOutputPath.js","sourceRoot":"","sources":["../../../../src/cli/helpers/inputOutputPath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE;IAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC;QAC7B,OAAO,EAAE,6BAA6B;QACtC,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,sBAAsB,CAAC,UAAU,CAAC;QAChD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACzB,OAAO,yBAAyB,CAAC;YAClC,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC9D,OAAO,gCAAgC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,gCAAgC,CAAC;YACzC,CAAC;QACF,CAAC;KACD,CAAC,CAAC;IACH,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC;QAC3C,OAAO,EAAE,qCAAqC;QAC9C,YAAY,EAAE,KAAK;KACnB,CAAC,CAAC;IACH,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtC,IAAI,qBAAqB,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC;QACpC,OAAO,EAAE,6BAA6B;QACtC,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,wBAAwB,CAAC,UAAU,CAAC;QAClD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACzB,OAAO,yBAAyB,CAAC;YAClC,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,yBAAyB,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,gCAAgC,CAAC;YACzC,CAAC;QACF,CAAC;KACD,CAAC,CAAC;IAEH,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAElC,OAAO,iBAAiB,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const inputSourcePath: () => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputSourcePath.js","sourceRoot":"","sources":["../../../../src/cli/helpers/inputSourcePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;QACzB,OAAO,EAAE,yDAAyD;QAClE,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACzB,OAAO,oBAAoB,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,OAAO,uIAAuI,CAAC;gBAChJ,CAAC;gBACD,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;oBACtC,OAAO,6HAA6H,CAAC;gBACtI,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC,CAAC;IACH,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const selectExtractMode: () => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectExtractMode.js","sourceRoot":"","sources":["../../../../src/cli/helpers/selectExtractMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC3B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;KACtB,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const selectLoader: () => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectLoader.js","sourceRoot":"","sources":["../../../../src/cli/helpers/selectLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,GAAG;IACnB,KAAK,EAAE,uCAAuC;IAC9C,UAAU,EAAE,kGAAkG;IAC9G,SAAS,EAAE,gGAAgG;CAClG,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC3B,OAAO,EAAE,gBAAgB;QACzB,YAAY,EAAE,OAAO;QACrB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC7F,CAAC,CAAC;IACH,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,MAAM,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines whether a string is a valid URL.
|
|
3
|
+
* @param maybeUrl - The string to check.
|
|
4
|
+
* @returns `true` if the string is a valid URL, otherwise `false`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isUrl: (maybeUrl: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Changes the file extension of a given file path.
|
|
9
|
+
* @param filePath - The original file path.
|
|
10
|
+
* @param newExtension - The new extension (with or without the leading dot).
|
|
11
|
+
* @returns The file path with the updated extension.
|
|
12
|
+
*/
|
|
13
|
+
export declare function changeFileExtension(filePath: string, newExtension: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Converts a URL into a safe filename.
|
|
16
|
+
* @param url - The URL to convert.
|
|
17
|
+
* @returns The generated filename, or "output" if conversion fails.
|
|
18
|
+
*/
|
|
19
|
+
export declare function urlToFilename(url: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Converts a source path to an output path. If the source is a URL, it generates a filename and changes the extension to .md.
|
|
22
|
+
* If the source is a file path, it simply changes the extension to .md.
|
|
23
|
+
* @param sourcePath - The source path or URL.
|
|
24
|
+
* @returns The corresponding output path.
|
|
25
|
+
*/
|
|
26
|
+
export declare const sourcePathToOutputPath: (sourcePath: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Retrieves the next available file path by appending a counter if the file already exists.
|
|
29
|
+
* @param filePath - The original file path.
|
|
30
|
+
* @returns A file path that does not currently exist.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getNextAvailableFilePath(filePath: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/cli/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { Nodes as Hast } from "hast";
|
|
2
2
|
export type ExtractPresets = "strongly" | "readability";
|
|
3
|
-
export type
|
|
3
|
+
export type ExtractParams = {
|
|
4
|
+
hast: Hast;
|
|
5
|
+
lang?: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
};
|
|
8
|
+
export type Extractor = ((param: ExtractParams) => Hast) | false | ExtractPresets;
|
|
4
9
|
export type Extracotrs = Extractor | Extractor[];
|
|
5
10
|
export declare const PRESET_EXTRACT_HAST: {
|
|
6
|
-
strongly: (
|
|
7
|
-
readability: (
|
|
11
|
+
strongly: (params: ExtractParams) => Hast;
|
|
12
|
+
readability: (params: ExtractParams) => Hast;
|
|
8
13
|
};
|
|
9
14
|
export declare const DEFAULT_EXTRACT_HAST: Extracotrs;
|
|
10
|
-
export declare const extractHast: (
|
|
15
|
+
export declare const extractHast: (params: ExtractParams, extractors?: Extracotrs) => Hast;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extract-hast/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extract-hast/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOjD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,sBAAsB;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAe,CAAC,aAAa,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAqB,EAAE,aAAyB,oBAAoB,EAAQ,EAAE;IACzG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAE1E,MAAM,SAAS,GACd,WAAW,CAAC,MAAM,CAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QAC3C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,mBAAmB,EAAE,CAAC;YACvE,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACpD,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAElB,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
|