webforai 2.1.1 → 4.0.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/README.md +86 -4
- package/dist/adapters/index.js +58 -0
- package/dist/adapters/registry.js +149 -0
- package/dist/adapters/sites/declarative.js +178 -0
- package/dist/adapters/sites/hackernews.js +94 -0
- package/dist/adapters/sites/youtube.js +165 -0
- package/dist/adapters/types.js +0 -0
- package/dist/bin.js +4142 -549
- package/dist/cjs/adapters/index.js +86 -0
- package/dist/cjs/adapters/registry.js +178 -0
- package/dist/cjs/adapters/sites/declarative.js +202 -0
- package/dist/cjs/adapters/sites/hackernews.js +117 -0
- package/dist/cjs/adapters/sites/youtube.js +191 -0
- package/dist/cjs/adapters/types.js +16 -0
- package/dist/cjs/constants.js +2 -2
- package/dist/cjs/detect-client-shell.js +78 -0
- package/dist/cjs/extract-meta-refresh.js +71 -0
- package/dist/cjs/extractors/index.js +5 -0
- package/dist/cjs/extractors/lib/constants.js +186 -0
- package/dist/cjs/extractors/lib/sanitize.js +429 -0
- package/dist/cjs/extractors/lib/score.js +264 -0
- package/dist/cjs/extractors/lib/terminators.js +131 -0
- package/dist/cjs/extractors/lib/ui-chrome.js +119 -0
- package/dist/cjs/extractors/pipeExtractors.js +12 -9
- package/dist/cjs/extractors/presets/auto.js +44 -0
- package/dist/cjs/extractors/presets/minimal-filter.js +27 -48
- package/dist/cjs/extractors/presets/takumi.js +84 -122
- package/dist/cjs/html-to-markdown.js +44 -7
- package/dist/cjs/html-to-mdast.js +10 -1
- package/dist/cjs/index.js +43 -2
- package/dist/cjs/link-replacer.js +19 -13
- package/dist/cjs/loaders/cf-puppeteer.js +14 -7
- package/dist/cjs/loaders/fetch.js +14 -2
- package/dist/cjs/loaders/playwright.js +32 -30
- package/dist/cjs/loaders/puppeteer.js +14 -7
- package/dist/cjs/md-splitter.js +24 -11
- package/dist/cjs/mdast-handlers/custom-a-handler.js +25 -9
- package/dist/cjs/mdast-handlers/custom-code-handler.js +18 -7
- package/dist/cjs/mdast-handlers/custom-div-handler.js +12 -33
- package/dist/cjs/mdast-handlers/custom-img-handler.js +23 -1
- package/dist/cjs/mdast-handlers/custom-table-handler.js +16 -0
- package/dist/cjs/mdast-handlers/definition-list-handler.js +110 -0
- package/dist/cjs/mdast-handlers/math-handler.js +12 -3
- package/dist/cjs/mdast-handlers/sup-sub-handler.js +39 -0
- package/dist/cjs/mdast-to-markdown.js +2 -5
- package/dist/cjs/metadata/index.js +223 -0
- package/dist/cjs/normalize/index.js +177 -0
- package/dist/cjs/platform/client.js +204 -0
- package/dist/cjs/platform/error.js +36 -0
- package/dist/cjs/platform/fetch.js +37 -0
- package/dist/cjs/platform/index.js +44 -0
- package/dist/cjs/platform/types.js +40 -0
- package/dist/cjs/utils/hast-fast.js +284 -0
- package/dist/constants.js +2 -2
- package/dist/detect-client-shell.js +53 -0
- package/dist/extract-meta-refresh.js +47 -0
- package/dist/extractors/index.js +3 -0
- package/dist/extractors/lib/constants.js +150 -0
- package/dist/extractors/lib/sanitize.js +419 -0
- package/dist/extractors/lib/score.js +242 -0
- package/dist/extractors/lib/terminators.js +107 -0
- package/dist/extractors/lib/ui-chrome.js +96 -0
- package/dist/extractors/pipeExtractors.js +12 -9
- package/dist/extractors/presets/auto.js +20 -0
- package/dist/extractors/presets/minimal-filter.js +35 -47
- package/dist/extractors/presets/takumi.js +91 -122
- package/dist/html-to-markdown.js +42 -6
- package/dist/html-to-mdast.js +10 -1
- package/dist/index.js +45 -2
- package/dist/link-replacer.js +19 -13
- package/dist/loaders/cf-puppeteer.js +15 -8
- package/dist/loaders/fetch.js +14 -2
- package/dist/loaders/playwright.js +32 -30
- package/dist/loaders/puppeteer.js +15 -8
- package/dist/md-splitter.js +24 -11
- package/dist/mdast-handlers/custom-a-handler.js +25 -9
- package/dist/mdast-handlers/custom-code-handler.js +17 -7
- package/dist/mdast-handlers/custom-div-handler.js +12 -33
- package/dist/mdast-handlers/custom-img-handler.js +23 -1
- package/dist/mdast-handlers/custom-table-handler.js +16 -0
- package/dist/mdast-handlers/definition-list-handler.js +87 -0
- package/dist/mdast-handlers/math-handler.js +12 -3
- package/dist/mdast-handlers/sup-sub-handler.js +16 -0
- package/dist/mdast-to-markdown.js +2 -5
- package/dist/metadata/index.js +198 -0
- package/dist/normalize/index.js +159 -0
- package/dist/platform/client.js +182 -0
- package/dist/platform/error.js +13 -0
- package/dist/platform/fetch.js +14 -0
- package/dist/platform/index.js +23 -0
- package/dist/platform/types.js +13 -0
- package/dist/types/adapters/index.d.ts +24 -0
- package/dist/types/adapters/index.js.map +1 -0
- package/dist/types/adapters/registry.d.ts +35 -0
- package/dist/types/adapters/registry.js.map +1 -0
- package/dist/types/adapters/sites/declarative.d.ts +13 -0
- package/dist/types/adapters/sites/declarative.js.map +1 -0
- package/dist/types/adapters/sites/hackernews.d.ts +13 -0
- package/dist/types/adapters/sites/hackernews.js.map +1 -0
- package/dist/types/adapters/sites/youtube.d.ts +31 -0
- package/dist/types/adapters/sites/youtube.js.map +1 -0
- package/dist/types/adapters/types.d.ts +99 -0
- package/dist/types/adapters/types.js.map +1 -0
- package/dist/types/cli/bin.js.map +1 -1
- package/dist/types/cli/commands/jobs/files.d.ts +28 -0
- package/dist/types/cli/commands/jobs/files.js.map +1 -0
- package/dist/types/cli/commands/jobs/llms-txt.d.ts +33 -0
- package/dist/types/cli/commands/jobs/llms-txt.js.map +1 -0
- package/dist/types/cli/commands/jobs/options.d.ts +58 -0
- package/dist/types/cli/commands/jobs/options.js.map +1 -0
- package/dist/types/cli/commands/jobs/run.d.ts +44 -0
- package/dist/types/cli/commands/jobs/run.js.map +1 -0
- package/dist/types/cli/commands/skill/content.d.ts +9 -0
- package/dist/types/cli/commands/skill/content.js.map +1 -0
- package/dist/types/cli/commands/skill/index.d.ts +19 -0
- package/dist/types/cli/commands/skill/index.js.map +1 -0
- package/dist/types/cli/commands/webforai/interactive.d.ts +7 -0
- package/dist/types/cli/commands/webforai/interactive.js.map +1 -0
- package/dist/types/cli/commands/webforai/loadHtml.js.map +1 -1
- package/dist/types/cli/commands/webforai/options.d.ts +62 -0
- package/dist/types/cli/commands/webforai/options.js.map +1 -0
- package/dist/types/cli/commands/webforai/run.d.ts +10 -0
- package/dist/types/cli/commands/webforai/run.js.map +1 -0
- package/dist/types/cli/constants.d.ts +14 -4
- package/dist/types/cli/constants.js.map +1 -1
- package/dist/types/cli/helpers/selectExtractMode.js.map +1 -1
- package/dist/types/cli/helpers/selectLoader.js.map +1 -1
- package/dist/types/cli/utils.d.ts +8 -1
- package/dist/types/cli/utils.js.map +1 -1
- package/dist/types/constants.d.ts +7 -1
- package/dist/types/constants.js.map +1 -1
- package/dist/types/detect-client-shell.d.ts +24 -0
- package/dist/types/detect-client-shell.js.map +1 -0
- package/dist/types/extract-meta-refresh.d.ts +29 -0
- package/dist/types/extract-meta-refresh.js.map +1 -0
- package/dist/types/extractors/index.d.ts +1 -0
- package/dist/types/extractors/index.js.map +1 -1
- package/dist/types/extractors/lib/constants.d.ts +81 -0
- package/dist/types/extractors/lib/constants.js.map +1 -0
- package/dist/types/extractors/lib/sanitize.d.ts +66 -0
- package/dist/types/extractors/lib/sanitize.js.map +1 -0
- package/dist/types/extractors/lib/score.d.ts +85 -0
- package/dist/types/extractors/lib/score.js.map +1 -0
- package/dist/types/extractors/lib/terminators.d.ts +26 -0
- package/dist/types/extractors/lib/terminators.js.map +1 -0
- package/dist/types/extractors/lib/ui-chrome.d.ts +18 -0
- package/dist/types/extractors/lib/ui-chrome.js.map +1 -0
- package/dist/types/extractors/pipeExtractors.d.ts +5 -0
- package/dist/types/extractors/pipeExtractors.js.map +1 -1
- package/dist/types/extractors/presets/auto.d.ts +30 -0
- package/dist/types/extractors/presets/auto.js.map +1 -0
- package/dist/types/extractors/presets/minimal-filter.d.ts +10 -2
- package/dist/types/extractors/presets/minimal-filter.js.map +1 -1
- package/dist/types/extractors/presets/takumi.d.ts +19 -3
- package/dist/types/extractors/presets/takumi.js.map +1 -1
- package/dist/types/extractors/types.d.ts +8 -0
- package/dist/types/html-to-markdown.d.ts +38 -0
- package/dist/types/html-to-markdown.js.map +1 -1
- package/dist/types/html-to-mdast.d.ts +11 -0
- package/dist/types/html-to-mdast.js.map +1 -1
- package/dist/types/index.d.ts +8 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/link-replacer.d.ts +3 -1
- package/dist/types/link-replacer.js.map +1 -1
- package/dist/types/loaders/cf-puppeteer.js.map +1 -1
- package/dist/types/loaders/fetch.d.ts +4 -0
- package/dist/types/loaders/fetch.js.map +1 -1
- package/dist/types/loaders/playwright.js.map +1 -1
- package/dist/types/loaders/puppeteer.js.map +1 -1
- package/dist/types/md-splitter.d.ts +1 -1
- package/dist/types/md-splitter.js.map +1 -1
- package/dist/types/mdast-handlers/custom-a-handler.js.map +1 -1
- package/dist/types/mdast-handlers/custom-code-handler.d.ts +2 -0
- package/dist/types/mdast-handlers/custom-code-handler.js.map +1 -1
- package/dist/types/mdast-handlers/custom-div-handler.js.map +1 -1
- package/dist/types/mdast-handlers/custom-img-handler.js.map +1 -1
- package/dist/types/mdast-handlers/custom-table-handler.js.map +1 -1
- package/dist/types/mdast-handlers/definition-list-handler.d.ts +2 -0
- package/dist/types/mdast-handlers/definition-list-handler.js.map +1 -0
- package/dist/types/mdast-handlers/math-handler.js.map +1 -1
- package/dist/types/mdast-handlers/sup-sub-handler.d.ts +10 -0
- package/dist/types/mdast-handlers/sup-sub-handler.js.map +1 -0
- package/dist/types/mdast-to-markdown.js.map +1 -1
- package/dist/types/metadata/index.d.ts +47 -0
- package/dist/types/metadata/index.js.map +1 -0
- package/dist/types/normalize/index.d.ts +53 -0
- package/dist/types/normalize/index.js.map +1 -0
- package/dist/types/platform/client.d.ts +55 -0
- package/dist/types/platform/client.js.map +1 -0
- package/dist/types/platform/error.d.ts +22 -0
- package/dist/types/platform/error.js.map +1 -0
- package/dist/types/platform/fetch.d.ts +36 -0
- package/dist/types/platform/fetch.js.map +1 -0
- package/dist/types/platform/index.d.ts +4 -0
- package/dist/types/platform/index.js.map +1 -0
- package/dist/types/platform/types.d.ts +164 -0
- package/dist/types/platform/types.js.map +1 -0
- package/dist/types/utils/hast-fast.d.ts +101 -0
- package/dist/types/utils/hast-fast.js.map +1 -0
- package/dist/utils/hast-fast.js +246 -0
- package/package.json +25 -7
- package/dist/types/cli/commands/webforai/index.d.ts +0 -6
- package/dist/types/cli/commands/webforai/index.js.map +0 -1
|
@@ -18,18 +18,55 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var html_to_markdown_exports = {};
|
|
20
20
|
__export(html_to_markdown_exports, {
|
|
21
|
-
htmlToMarkdown: () => htmlToMarkdown
|
|
21
|
+
htmlToMarkdown: () => htmlToMarkdown,
|
|
22
|
+
htmlToMarkdownWithMetadata: () => htmlToMarkdownWithMetadata
|
|
22
23
|
});
|
|
23
24
|
module.exports = __toCommonJS(html_to_markdown_exports);
|
|
25
|
+
var import_hast_util_from_html = require("hast-util-from-html");
|
|
24
26
|
var import_html_to_mdast = require("./html-to-mdast");
|
|
25
27
|
var import_mdast_to_markdown = require("./mdast-to-markdown");
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
28
|
+
var import_metadata = require("./metadata");
|
|
29
|
+
var import_hast_utils = require("./utils/hast-utils");
|
|
30
|
+
const htmlToMarkdownWithMetadata = (htmlOrHast, options) => {
|
|
31
|
+
const { baseUrl, frontmatter, title, formatting: toMarkdownOptions, ...toMdastOptions } = options || {};
|
|
32
|
+
const hast = typeof htmlOrHast === "string" ? (0, import_hast_util_from_html.fromHtml)(htmlOrHast, { fragment: true }) : htmlOrHast;
|
|
33
|
+
const isOwned = typeof htmlOrHast === "string";
|
|
34
|
+
const declaredLang = typeof htmlOrHast === "string" ? (0, import_hast_utils.getLangFromStr)(htmlOrHast) : void 0;
|
|
35
|
+
const metadata = (0, import_metadata.extractMetadata)(hast);
|
|
36
|
+
if (declaredLang && !metadata.lang) {
|
|
37
|
+
metadata.lang = declaredLang;
|
|
38
|
+
}
|
|
39
|
+
const mdast = (0, import_html_to_mdast.htmlToMdast)(hast, {
|
|
40
|
+
...toMdastOptions,
|
|
41
|
+
owned: isOwned,
|
|
42
|
+
lang: toMdastOptions.lang ?? metadata.lang,
|
|
43
|
+
url: toMdastOptions.url ?? metadata.canonicalUrl
|
|
44
|
+
});
|
|
45
|
+
const body = (0, import_mdast_to_markdown.mdastToMarkdown)(mdast, { baseUrl, ...toMarkdownOptions });
|
|
46
|
+
const titled = title === false ? body : withTitle(body, metadata.title);
|
|
47
|
+
const markdown = frontmatter ? `${(0, import_metadata.toFrontmatter)(metadata)}${titled}` : titled;
|
|
48
|
+
return { markdown, metadata };
|
|
49
|
+
};
|
|
50
|
+
const TITLE_LOOKAHEAD = 400;
|
|
51
|
+
const withTitle = (body, title) => {
|
|
52
|
+
if (!title) {
|
|
53
|
+
return body;
|
|
54
|
+
}
|
|
55
|
+
const opening = body.slice(0, TITLE_LOOKAHEAD);
|
|
56
|
+
if (/^#\s+\S/m.test(opening)) {
|
|
57
|
+
return body;
|
|
58
|
+
}
|
|
59
|
+
if (normalizeForCompare(opening).includes(normalizeForCompare(title))) {
|
|
60
|
+
return body;
|
|
61
|
+
}
|
|
62
|
+
return `# ${title}
|
|
63
|
+
|
|
64
|
+
${body}`;
|
|
31
65
|
};
|
|
66
|
+
const normalizeForCompare = (value) => value.replace(/\s+/g, " ").trim().toLowerCase();
|
|
67
|
+
const htmlToMarkdown = (htmlOrHast, options) => htmlToMarkdownWithMetadata(htmlOrHast, options).markdown;
|
|
32
68
|
// Annotate the CommonJS export names for ESM import in node:
|
|
33
69
|
0 && (module.exports = {
|
|
34
|
-
htmlToMarkdown
|
|
70
|
+
htmlToMarkdown,
|
|
71
|
+
htmlToMarkdownWithMetadata
|
|
35
72
|
});
|
|
@@ -30,18 +30,27 @@ var import_custom_code_handler = require("./mdast-handlers/custom-code-handler")
|
|
|
30
30
|
var import_custom_div_handler = require("./mdast-handlers/custom-div-handler");
|
|
31
31
|
var import_custom_img_handler = require("./mdast-handlers/custom-img-handler");
|
|
32
32
|
var import_custom_table_handler = require("./mdast-handlers/custom-table-handler");
|
|
33
|
+
var import_definition_list_handler = require("./mdast-handlers/definition-list-handler");
|
|
33
34
|
var import_math_handler = require("./mdast-handlers/math-handler");
|
|
35
|
+
var import_sup_sub_handler = require("./mdast-handlers/sup-sub-handler");
|
|
36
|
+
var import_normalize = require("./normalize");
|
|
37
|
+
var import_hast_fast = require("./utils/hast-fast");
|
|
34
38
|
var import_hast_utils = require("./utils/hast-utils");
|
|
35
39
|
const htmlToMdast = (htmlOrHast, options) => {
|
|
36
40
|
const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
|
|
37
41
|
const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || (0, import_hast_utils.getLangFromStr)(htmlOrHast), (0, import_hast_util_from_html.fromHtml)(htmlOrHast, { fragment: true })] : [defaultLang || (0, import_hast_utils.getLangFromHast)(htmlOrHast), htmlOrHast];
|
|
42
|
+
const isOwned = typeof htmlOrHast === "string" || (options?.owned ?? false);
|
|
38
43
|
const url = defaultUrl || (0, import_hast_utils.getUrlFromHast)(hast);
|
|
39
|
-
const extractedHast = (0, import_extractors.pipeExtractors)({ hast, lang, url }, extractors);
|
|
44
|
+
const extractedHast = (0, import_extractors.pipeExtractors)({ hast: isOwned ? hast : (0, import_hast_fast.cloneHast)(hast), lang, url, owned: true }, extractors);
|
|
45
|
+
(0, import_normalize.normalizeHast)(extractedHast, options?.normalize);
|
|
40
46
|
const mdast = (0, import_hast_util_to_mdast.toMdast)(extractedHast, {
|
|
41
47
|
handlers: {
|
|
42
48
|
math: import_math_handler.mathHandler,
|
|
43
49
|
div: import_custom_div_handler.customDivHandler,
|
|
44
50
|
pre: import_custom_code_handler.customCodeHandler,
|
|
51
|
+
dl: import_definition_list_handler.definitionListHandler,
|
|
52
|
+
sup: (0, import_sup_sub_handler.supSubHandler)("sup"),
|
|
53
|
+
sub: (0, import_sup_sub_handler.supSubHandler)("sub"),
|
|
45
54
|
a: (0, import_custom_a_handler.customAHandler)({ asText: options?.linkAsText }),
|
|
46
55
|
img: (0, import_custom_img_handler.customImgHandler)({ hideImage: options?.hideImage }),
|
|
47
56
|
table: (0, import_custom_table_handler.customTableHandler)({ asText: options?.tableAsText })
|
package/dist/cjs/index.js
CHANGED
|
@@ -18,13 +18,31 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var src_exports = {};
|
|
20
20
|
__export(src_exports, {
|
|
21
|
+
BUILTIN_ADAPTERS: () => import_adapters.BUILTIN_ADAPTERS,
|
|
22
|
+
MAX_META_REFRESH_DELAY_SECONDS: () => import_extract_meta_refresh.MAX_META_REFRESH_DELAY_SECONDS,
|
|
23
|
+
SHELL_EMPTY_THRESHOLD: () => import_detect_client_shell.SHELL_EMPTY_THRESHOLD,
|
|
24
|
+
SHELL_SUSPICION_THRESHOLD: () => import_detect_client_shell.SHELL_SUSPICION_THRESHOLD,
|
|
25
|
+
adapterById: () => import_adapters.adapterById,
|
|
26
|
+
autoExtractor: () => import_extractors.autoExtractor,
|
|
27
|
+
buildPageSignature: () => import_adapters.buildPageSignature,
|
|
28
|
+
createAutoExtractor: () => import_extractors.createAutoExtractor,
|
|
29
|
+
defineSelectorAdapter: () => import_adapters.defineSelectorAdapter,
|
|
30
|
+
detectClientShell: () => import_detect_client_shell.detectClientShell,
|
|
31
|
+
extractMetaRefresh: () => import_extract_meta_refresh.extractMetaRefresh,
|
|
32
|
+
extractMetadata: () => import_metadata.extractMetadata,
|
|
21
33
|
htmlToMarkdown: () => import_html_to_markdown.htmlToMarkdown,
|
|
34
|
+
htmlToMarkdownWithMetadata: () => import_html_to_markdown.htmlToMarkdownWithMetadata,
|
|
22
35
|
htmlToMdast: () => import_html_to_mdast.htmlToMdast,
|
|
23
36
|
mdastSplitter: () => import_md_splitter.mdastSplitter,
|
|
24
37
|
mdastToMarkdown: () => import_mdast_to_markdown.mdastToMarkdown,
|
|
25
38
|
minimalFilter: () => import_extractors.minimalFilter,
|
|
39
|
+
normalizeHast: () => import_normalize.normalizeHast,
|
|
26
40
|
pipeExtractors: () => import_extractors.pipeExtractors,
|
|
27
|
-
|
|
41
|
+
resolveAdapter: () => import_adapters.resolveAdapter,
|
|
42
|
+
runAdapters: () => import_adapters.runAdapters,
|
|
43
|
+
takumiExtractor: () => import_extractors.takumiExtractor,
|
|
44
|
+
toFrontmatter: () => import_metadata.toFrontmatter,
|
|
45
|
+
youtubeCaptionTracks: () => import_adapters.youtubeCaptionTracks
|
|
28
46
|
});
|
|
29
47
|
module.exports = __toCommonJS(src_exports);
|
|
30
48
|
var import_html_to_markdown = require("./html-to-markdown");
|
|
@@ -32,13 +50,36 @@ var import_md_splitter = require("./md-splitter");
|
|
|
32
50
|
var import_html_to_mdast = require("./html-to-mdast");
|
|
33
51
|
var import_mdast_to_markdown = require("./mdast-to-markdown");
|
|
34
52
|
var import_extractors = require("./extractors");
|
|
53
|
+
var import_adapters = require("./adapters");
|
|
54
|
+
var import_detect_client_shell = require("./detect-client-shell");
|
|
55
|
+
var import_extract_meta_refresh = require("./extract-meta-refresh");
|
|
56
|
+
var import_metadata = require("./metadata");
|
|
57
|
+
var import_normalize = require("./normalize");
|
|
35
58
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
59
|
0 && (module.exports = {
|
|
60
|
+
BUILTIN_ADAPTERS,
|
|
61
|
+
MAX_META_REFRESH_DELAY_SECONDS,
|
|
62
|
+
SHELL_EMPTY_THRESHOLD,
|
|
63
|
+
SHELL_SUSPICION_THRESHOLD,
|
|
64
|
+
adapterById,
|
|
65
|
+
autoExtractor,
|
|
66
|
+
buildPageSignature,
|
|
67
|
+
createAutoExtractor,
|
|
68
|
+
defineSelectorAdapter,
|
|
69
|
+
detectClientShell,
|
|
70
|
+
extractMetaRefresh,
|
|
71
|
+
extractMetadata,
|
|
37
72
|
htmlToMarkdown,
|
|
73
|
+
htmlToMarkdownWithMetadata,
|
|
38
74
|
htmlToMdast,
|
|
39
75
|
mdastSplitter,
|
|
40
76
|
mdastToMarkdown,
|
|
41
77
|
minimalFilter,
|
|
78
|
+
normalizeHast,
|
|
42
79
|
pipeExtractors,
|
|
43
|
-
|
|
80
|
+
resolveAdapter,
|
|
81
|
+
runAdapters,
|
|
82
|
+
takumiExtractor,
|
|
83
|
+
toFrontmatter,
|
|
84
|
+
youtubeCaptionTracks
|
|
44
85
|
});
|
|
@@ -21,19 +21,25 @@ __export(link_replacer_exports, {
|
|
|
21
21
|
linkReplacer: () => linkReplacer
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(link_replacer_exports);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
24
|
+
const absoluteUrl = (url, base) => {
|
|
25
|
+
if (/^(?:[a-z][a-z\d+.-]*:|#)/i.test(url)) {
|
|
26
|
+
return url;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
return new URL(url, base).href;
|
|
30
|
+
} catch {
|
|
31
|
+
return url;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const linkReplacer = (node, base) => {
|
|
35
|
+
let result = node;
|
|
36
|
+
if (node.type === "link" || node.type === "image" || node.type === "definition") {
|
|
37
|
+
result = { ...node, url: absoluteUrl(node.url, base) };
|
|
38
|
+
}
|
|
39
|
+
if ("children" in result) {
|
|
40
|
+
return { ...result, children: result.children.map((child) => linkReplacer(child, base)) };
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
37
43
|
};
|
|
38
44
|
// Annotate the CommonJS export names for ESM import in node:
|
|
39
45
|
0 && (module.exports = {
|
|
@@ -32,15 +32,22 @@ __export(cf_puppeteer_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(cf_puppeteer_exports);
|
|
34
34
|
var import_puppeteer = __toESM(require("@cloudflare/puppeteer"), 1);
|
|
35
|
-
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
36
35
|
const loadHtml = async (url, ctx) => {
|
|
37
36
|
const browser = await import_puppeteer.default.launch(ctx);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
try {
|
|
38
|
+
const page = await browser.newPage();
|
|
39
|
+
await page.goto(url);
|
|
40
|
+
try {
|
|
41
|
+
await page.waitForNetworkIdle({ timeout: 1e4 });
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (!(error instanceof import_puppeteer.TimeoutError)) {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return await page.content();
|
|
48
|
+
} finally {
|
|
49
|
+
await browser.close();
|
|
50
|
+
}
|
|
44
51
|
};
|
|
45
52
|
// Annotate the CommonJS export names for ESM import in node:
|
|
46
53
|
0 && (module.exports = {
|
|
@@ -22,10 +22,22 @@ __export(fetch_exports, {
|
|
|
22
22
|
loadHtml: () => loadHtml
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(fetch_exports);
|
|
25
|
+
var import_extract_meta_refresh = require("../extract-meta-refresh");
|
|
25
26
|
const USER_AGENT = "mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/125.0.0.0 safari/537.36";
|
|
27
|
+
const MAX_META_REFRESH_HOPS = 3;
|
|
26
28
|
const loadHtml = async (url, userAgent = USER_AGENT) => {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
let current = url;
|
|
30
|
+
let html = "";
|
|
31
|
+
for (let hop = 0; hop <= MAX_META_REFRESH_HOPS; hop++) {
|
|
32
|
+
const response = await fetch(current, { headers: { "User-Agent": userAgent } });
|
|
33
|
+
html = await response.text();
|
|
34
|
+
const refresh = (0, import_extract_meta_refresh.extractMetaRefresh)(html, response.url || current);
|
|
35
|
+
if (!refresh) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
current = refresh.url;
|
|
39
|
+
}
|
|
40
|
+
return html;
|
|
29
41
|
};
|
|
30
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
31
43
|
0 && (module.exports = {
|
|
@@ -35,40 +35,42 @@ const SUPER_BYPASS_DEVICE = {
|
|
|
35
35
|
const loadHtml = async (url, options) => {
|
|
36
36
|
const { browser, waitUntil, timeout, superBypassMode } = options ?? {};
|
|
37
37
|
const _browser = browser ?? await import_playwright_core.chromium.launch({ headless: true });
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
await
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
await
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
let context;
|
|
39
|
+
try {
|
|
40
|
+
context = await _browser.newContext(superBypassMode ? SUPER_BYPASS_DEVICE : import_playwright_core.devices["Desktop Chrome"]);
|
|
41
|
+
if (superBypassMode) {
|
|
42
|
+
await context.addInitScript(() => {
|
|
43
|
+
Object.defineProperty(navigator, "webdriver", { get: () => void 0 });
|
|
44
|
+
Object.defineProperty(navigator, "languages", { get: () => ["en-US", "en"] });
|
|
45
|
+
Object.defineProperty(navigator, "plugins", { get: () => [1, 2, 3, 4, 5] });
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const page = await context.newPage();
|
|
49
|
+
if (superBypassMode) {
|
|
50
|
+
await page.route("**/*.js", (route) => {
|
|
51
|
+
if (route.request().url().includes("captcha-delivery")) {
|
|
52
|
+
return route.abort();
|
|
53
|
+
}
|
|
54
|
+
return route.continue();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
await page.goto(url, { waitUntil: waitUntil ?? "load", timeout });
|
|
58
|
+
await page.evaluate(() => {
|
|
59
|
+
const elements = document.querySelectorAll("*");
|
|
60
|
+
for (const element of elements) {
|
|
61
|
+
const rect = element.getBoundingClientRect();
|
|
62
|
+
element.setAttribute("data-rwidth", rect.width.toString());
|
|
63
|
+
element.setAttribute("data-rheight", rect.height.toString());
|
|
51
64
|
}
|
|
52
|
-
return route.continue();
|
|
53
65
|
});
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
element.setAttribute("data-rwidth", rect.width.toString());
|
|
61
|
-
element.setAttribute("data-rheight", rect.height.toString());
|
|
66
|
+
return await page.content();
|
|
67
|
+
} finally {
|
|
68
|
+
if (browser) {
|
|
69
|
+
await context?.close();
|
|
70
|
+
} else {
|
|
71
|
+
await _browser.close();
|
|
62
72
|
}
|
|
63
|
-
});
|
|
64
|
-
const html = await page.content();
|
|
65
|
-
await page.close();
|
|
66
|
-
if (browser) {
|
|
67
|
-
await context.close();
|
|
68
|
-
} else {
|
|
69
|
-
await _browser.close();
|
|
70
73
|
}
|
|
71
|
-
return html;
|
|
72
74
|
};
|
|
73
75
|
// Annotate the CommonJS export names for ESM import in node:
|
|
74
76
|
0 && (module.exports = {
|
|
@@ -32,7 +32,6 @@ __export(puppeteer_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(puppeteer_exports);
|
|
34
34
|
var import_puppeteer = __toESM(require("puppeteer"), 1);
|
|
35
|
-
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
36
35
|
const loadHtml = async (url, ctx) => {
|
|
37
36
|
const browser = await import_puppeteer.default.launch(
|
|
38
37
|
ctx || {
|
|
@@ -40,12 +39,20 @@ const loadHtml = async (url, ctx) => {
|
|
|
40
39
|
args: ["--no-sandbox", "--disable-setuid-sandbox"]
|
|
41
40
|
}
|
|
42
41
|
);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
try {
|
|
43
|
+
const page = await browser.newPage();
|
|
44
|
+
await page.goto(url);
|
|
45
|
+
try {
|
|
46
|
+
await page.waitForNetworkIdle({ timeout: 1e4 });
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (!(error instanceof import_puppeteer.TimeoutError)) {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return await page.content();
|
|
53
|
+
} finally {
|
|
54
|
+
await browser.close();
|
|
55
|
+
}
|
|
49
56
|
};
|
|
50
57
|
// Annotate the CommonJS export names for ESM import in node:
|
|
51
58
|
0 && (module.exports = {
|
package/dist/cjs/md-splitter.js
CHANGED
|
@@ -25,15 +25,13 @@ var import_mdast_to_markdown = require("./mdast-to-markdown");
|
|
|
25
25
|
var import_common = require("./utils/common");
|
|
26
26
|
var import_mdast_utils = require("./utils/mdast-utils");
|
|
27
27
|
const PRIORITY_SPLITTERS = ["h1", "h2", "h3", "h4", "h5", "h6", "list", "table", "code"];
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const _mdastSplitter = async (contents, checker, splitterGenerator) => {
|
|
34
|
-
const splitter = splitterGenerator.next().value;
|
|
28
|
+
const _mdastSplitter = async (contents, checker, priority, signal) => {
|
|
29
|
+
signal?.throwIfAborted();
|
|
30
|
+
const splitter = PRIORITY_SPLITTERS[priority];
|
|
35
31
|
const markdown = (0, import_mdast_to_markdown.mdastToMarkdown)((0, import_mdast_utils.warpRoot)(contents));
|
|
36
|
-
|
|
32
|
+
const accepted = await checker(markdown);
|
|
33
|
+
signal?.throwIfAborted();
|
|
34
|
+
if (accepted || contents.length === 1) {
|
|
37
35
|
return [contents];
|
|
38
36
|
}
|
|
39
37
|
const chunked = splitter ? contents.reduce((acc, content) => {
|
|
@@ -44,11 +42,26 @@ const _mdastSplitter = async (contents, checker, splitterGenerator) => {
|
|
|
44
42
|
acc[acc.length - 1].push(content);
|
|
45
43
|
return acc;
|
|
46
44
|
}, []) : (0, import_common.chunk)(contents, Math.ceil(contents.length / 2));
|
|
47
|
-
const splitting = chunked.map((chunk2) => _mdastSplitter(chunk2, checker,
|
|
45
|
+
const splitting = chunked.map((chunk2) => _mdastSplitter(chunk2, checker, priority + 1, signal));
|
|
48
46
|
return Promise.all(splitting).then((chunks) => chunks.flat());
|
|
49
47
|
};
|
|
50
|
-
const mdastSplitter = (mdast, checker,
|
|
51
|
-
|
|
48
|
+
const mdastSplitter = async (mdast, checker, options) => {
|
|
49
|
+
const signal = options?.signal;
|
|
50
|
+
if (!signal) {
|
|
51
|
+
return _mdastSplitter((0, import_mdast_utils.unwarpRoot)(mdast), checker, 0);
|
|
52
|
+
}
|
|
53
|
+
signal.throwIfAborted();
|
|
54
|
+
let onAbort = () => {
|
|
55
|
+
};
|
|
56
|
+
const aborted = new Promise((_, reject) => {
|
|
57
|
+
onAbort = () => reject(signal.reason);
|
|
58
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
return await Promise.race([_mdastSplitter((0, import_mdast_utils.unwarpRoot)(mdast), checker, 0, signal), aborted]);
|
|
62
|
+
} finally {
|
|
63
|
+
signal.removeEventListener("abort", onAbort);
|
|
64
|
+
}
|
|
52
65
|
};
|
|
53
66
|
// Annotate the CommonJS export names for ESM import in node:
|
|
54
67
|
0 && (module.exports = {
|
|
@@ -23,21 +23,37 @@ __export(custom_a_handler_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(custom_a_handler_exports);
|
|
24
24
|
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
|
+
var import_hast_fast = require("../utils/hast-fast");
|
|
27
|
+
const ALLOWED_SCHEMES = /* @__PURE__ */ new Set(["http:", "https:", "mailto:", "tel:", "ftp:", "ftps:"]);
|
|
28
|
+
const isFollowableHref = (href) => {
|
|
29
|
+
const trimmed = href?.trim();
|
|
30
|
+
if (!trimmed) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const scheme = trimmed.match(/^[a-z][a-z0-9+.-]*:/i)?.[0];
|
|
34
|
+
if (!scheme) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return ALLOWED_SCHEMES.has(scheme.toLowerCase());
|
|
38
|
+
};
|
|
26
39
|
const customAHandler = (options) => (state, node) => {
|
|
27
|
-
|
|
40
|
+
const asPlainText = () => {
|
|
28
41
|
const text = (0, import_hast_util_to_string.toString)(node);
|
|
29
|
-
if (
|
|
42
|
+
if (text.length === 0) {
|
|
30
43
|
return void 0;
|
|
31
44
|
}
|
|
32
|
-
const
|
|
33
|
-
state.patch(node,
|
|
34
|
-
return
|
|
45
|
+
const result = { type: "text", value: text };
|
|
46
|
+
state.patch(node, result);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
if (options?.asText) {
|
|
50
|
+
return (0, import_hast_util_to_string.toString)(node).length <= 3 ? void 0 : asPlainText();
|
|
35
51
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return link;
|
|
52
|
+
if (!isFollowableHref((0, import_hast_fast.stringProperty)(node, "href"))) {
|
|
53
|
+
return asPlainText();
|
|
39
54
|
}
|
|
40
|
-
|
|
55
|
+
const link = import_hast_util_to_mdast.defaultHandlers.a(state, node);
|
|
56
|
+
return link.children.length > 0 ? link : void 0;
|
|
41
57
|
};
|
|
42
58
|
// Annotate the CommonJS export names for ESM import in node:
|
|
43
59
|
0 && (module.exports = {
|
|
@@ -18,20 +18,30 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var custom_code_handler_exports = {};
|
|
20
20
|
__export(custom_code_handler_exports, {
|
|
21
|
+
codeLanguage: () => codeLanguage,
|
|
21
22
|
customCodeHandler: () => customCodeHandler
|
|
22
23
|
});
|
|
23
24
|
module.exports = __toCommonJS(custom_code_handler_exports);
|
|
24
25
|
var import_hast_util_to_text = require("hast-util-to-text");
|
|
25
26
|
var import_trim_trailing_lines = require("trim-trailing-lines");
|
|
26
27
|
var import_detect_code_lang = require("../utils/detect-code-lang");
|
|
27
|
-
|
|
28
|
+
var import_hast_fast = require("../utils/hast-fast");
|
|
29
|
+
const LANGUAGE_MATCH_REGEX = [/^language-(\S+)$/, /^highlight-source-(\S+)$/, /^CodeBlock--language-(\S+)$/];
|
|
30
|
+
const LANGUAGE_ATTRIBUTES = ["dataLanguage", "dataLang"];
|
|
31
|
+
const attributeLanguage = (element) => {
|
|
32
|
+
for (const name of LANGUAGE_ATTRIBUTES) {
|
|
33
|
+
const value = element.properties?.[name];
|
|
34
|
+
if (typeof value === "string" && /^[\w+#.-]+$/.test(value.trim()) && value.trim() !== "plaintext") {
|
|
35
|
+
return value.trim();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return void 0;
|
|
39
|
+
};
|
|
40
|
+
const codeLanguage = (...elements) => elements.flatMap(import_hast_fast.classList).map((className) => LANGUAGE_MATCH_REGEX.map((regex) => className.match(regex)).find(Boolean)?.[1]).find(Boolean) ?? elements.map(attributeLanguage).find(Boolean);
|
|
28
41
|
const customCodeHandler = (state, node) => {
|
|
29
|
-
const
|
|
30
|
-
const codeValue = (0, import_trim_trailing_lines.trimTrailingLines)((0, import_hast_util_to_text.toText)(node))
|
|
31
|
-
const classLang =
|
|
32
|
-
const match = LANGUAGE_MATCH_REGEX.map((regex) => className.match(regex)).find((match2) => match2);
|
|
33
|
-
return match?.[1];
|
|
34
|
-
}).find((className) => className);
|
|
42
|
+
const code = node.children.find((child) => (0, import_hast_fast.isElement)(child) && child.tagName === "code");
|
|
43
|
+
const codeValue = (0, import_trim_trailing_lines.trimTrailingLines)((0, import_hast_util_to_text.toText)(node));
|
|
44
|
+
const classLang = codeLanguage(...(0, import_hast_fast.isElement)(code) ? [code, node] : [node]);
|
|
35
45
|
const lang = classLang || (0, import_detect_code_lang.detectLanguage)(codeValue) || null;
|
|
36
46
|
const result = { type: "code", lang, meta: null, value: codeValue };
|
|
37
47
|
state.patch(node, result);
|
|
@@ -39,5 +49,6 @@ const customCodeHandler = (state, node) => {
|
|
|
39
49
|
};
|
|
40
50
|
// Annotate the CommonJS export names for ESM import in node:
|
|
41
51
|
0 && (module.exports = {
|
|
52
|
+
codeLanguage,
|
|
42
53
|
customCodeHandler
|
|
43
54
|
});
|
|
@@ -27,44 +27,23 @@ var import_hast_util_to_string = require("hast-util-to-string");
|
|
|
27
27
|
var import_hast_util_to_text = require("hast-util-to-text");
|
|
28
28
|
var import_trim_trailing_lines = require("trim-trailing-lines");
|
|
29
29
|
var import_detect_code_lang = require("../utils/detect-code-lang");
|
|
30
|
+
var import_hast_fast = require("../utils/hast-fast");
|
|
31
|
+
var import_custom_code_handler = require("./custom-code-handler");
|
|
30
32
|
const CODE_BLOCK_REGEX = /highlight-source|language-|codegroup|codeblock|code-block/i;
|
|
31
33
|
const CODE_FILENAME_SELECTORS = "[class*='fileName'],[class*='fileName'],[class*='title'],[class*='Title']";
|
|
32
|
-
const LANGUAGE_MATCH_REGEX = [/language-(\w+)/, /highlight-source-(\w+)/, /CodeBlock--language-(\w+)/];
|
|
33
|
-
const findRecursive = (array, condition, maxDepth = 3) => {
|
|
34
|
-
if (maxDepth <= 0) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
for (const value of array) {
|
|
38
|
-
const result = condition(value);
|
|
39
|
-
if (Array.isArray(result)) {
|
|
40
|
-
return findRecursive(result, condition, maxDepth - 1);
|
|
41
|
-
}
|
|
42
|
-
if (result) {
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return null;
|
|
47
|
-
};
|
|
48
34
|
const customDivHandler = (state, node) => {
|
|
49
|
-
const classNames =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return child.children.filter((child2) => child2.type === "element");
|
|
58
|
-
});
|
|
59
|
-
if (codeBlock && classNames.some((className) => CODE_BLOCK_REGEX.test(className))) {
|
|
60
|
-
const codeBlockClassNames = codeBlock.type === "element" ? codeBlock.properties.className ?? [] : [];
|
|
61
|
-
const codeValue = (0, import_trim_trailing_lines.trimTrailingLines)((0, import_hast_util_to_text.toText)(codeBlock)).trim();
|
|
35
|
+
const classNames = (0, import_hast_fast.classList)(node);
|
|
36
|
+
if (!classNames.some((className) => CODE_BLOCK_REGEX.test(className))) {
|
|
37
|
+
return import_hast_util_to_mdast.defaultHandlers.div(state, node);
|
|
38
|
+
}
|
|
39
|
+
const codeBlocks = (0, import_hast_fast.collectElements)(node, (element) => element.tagName === "pre");
|
|
40
|
+
const codeBlock = codeBlocks.length === 1 ? codeBlocks[0] : void 0;
|
|
41
|
+
if (codeBlock) {
|
|
42
|
+
const codeValue = (0, import_trim_trailing_lines.trimTrailingLines)((0, import_hast_util_to_text.toText)(codeBlock));
|
|
62
43
|
const filenameElement = (0, import_hast_util_select.select)(CODE_FILENAME_SELECTORS, node);
|
|
63
44
|
const fileLang = filenameElement ? (0, import_hast_util_to_string.toString)(filenameElement).match(/\.(\w+)$/)?.[1] : null;
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
return match?.[1];
|
|
67
|
-
}).find((className) => className);
|
|
45
|
+
const code = codeBlock.children.find((child) => (0, import_hast_fast.isElement)(child) && child.tagName === "code");
|
|
46
|
+
const classLang = (0, import_custom_code_handler.codeLanguage)(...(0, import_hast_fast.isElement)(code) ? [code, codeBlock, node] : [codeBlock, node]);
|
|
68
47
|
const lang = fileLang || classLang || (0, import_detect_code_lang.detectLanguage)(codeValue) || null;
|
|
69
48
|
const result = { type: "code", lang, meta: null, value: codeValue };
|
|
70
49
|
state.patch(node, result);
|
|
@@ -22,11 +22,33 @@ __export(custom_img_handler_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(custom_img_handler_exports);
|
|
24
24
|
var import_hast_util_to_mdast = require("hast-util-to-mdast");
|
|
25
|
+
var import_hast_fast = require("../utils/hast-fast");
|
|
26
|
+
const MAX_DATA_URL_LENGTH = 256;
|
|
27
|
+
const hasNoUsableSource = (node) => {
|
|
28
|
+
const src = (0, import_hast_fast.stringProperty)(node, "src")?.trim();
|
|
29
|
+
if (!src) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (src.startsWith("data:")) {
|
|
33
|
+
return src.length > MAX_DATA_URL_LENGTH;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
25
37
|
const customImgHandler = (options) => (state, node) => {
|
|
26
38
|
if (options?.hideImage) {
|
|
27
39
|
return void 0;
|
|
28
40
|
}
|
|
29
|
-
|
|
41
|
+
if (hasNoUsableSource(node)) {
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
const image = import_hast_util_to_mdast.defaultHandlers.image(state, node);
|
|
45
|
+
if (!image.alt) {
|
|
46
|
+
const title = (0, import_hast_fast.stringProperty)(node, "title");
|
|
47
|
+
if (title) {
|
|
48
|
+
image.alt = title;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return image;
|
|
30
52
|
};
|
|
31
53
|
// Annotate the CommonJS export names for ESM import in node:
|
|
32
54
|
0 && (module.exports = {
|
|
@@ -23,12 +23,28 @@ __export(custom_table_handler_exports, {
|
|
|
23
23
|
module.exports = __toCommonJS(custom_table_handler_exports);
|
|
24
24
|
var import_hast_util_to_mdast = require("hast-util-to-mdast");
|
|
25
25
|
var import_hast_util_to_text = require("hast-util-to-text");
|
|
26
|
+
var import_hast_fast = require("../utils/hast-fast");
|
|
27
|
+
const MAX_SPAN = 1e3;
|
|
28
|
+
const clampSpans = (node) => {
|
|
29
|
+
(0, import_hast_fast.walk)(node, (candidate) => {
|
|
30
|
+
if (!(0, import_hast_fast.isElement)(candidate) || candidate.tagName !== "td" && candidate.tagName !== "th") {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const attribute of ["colSpan", "rowSpan"]) {
|
|
34
|
+
const span = (0, import_hast_fast.numericProperty)(candidate, attribute);
|
|
35
|
+
if (span !== void 0 && span > MAX_SPAN) {
|
|
36
|
+
candidate.properties[attribute] = MAX_SPAN;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
26
41
|
const customTableHandler = (options) => (state, node) => {
|
|
27
42
|
if (options?.asText) {
|
|
28
43
|
const paragraph = { type: "paragraph", children: [{ type: "text", value: (0, import_hast_util_to_text.toText)(node) }] };
|
|
29
44
|
state.patch(node, paragraph);
|
|
30
45
|
return paragraph;
|
|
31
46
|
}
|
|
47
|
+
clampSpans(node);
|
|
32
48
|
return import_hast_util_to_mdast.defaultHandlers.table(state, node);
|
|
33
49
|
};
|
|
34
50
|
// Annotate the CommonJS export names for ESM import in node:
|