webforai 1.6.2 → 2.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/LICENSE +201 -21
- package/README.md +45 -111
- package/dist/bin.js +59 -110
- package/dist/cjs/constants.js +34 -0
- package/dist/cjs/extractors/index.js +31 -0
- package/dist/cjs/{extract-hast/index.js → extractors/pipeExtractors.js} +9 -19
- package/dist/cjs/{extract-hast/readability.js → extractors/presets/takumi.js} +6 -6
- package/dist/cjs/extractors/types.js +16 -0
- package/dist/cjs/html-to-mdast.js +2 -2
- package/dist/cjs/index.js +7 -7
- package/dist/cjs/loaders/puppeteer.js +1 -1
- package/dist/constants.js +10 -0
- package/dist/extractors/index.js +9 -0
- package/dist/{extract-hast/index.js → extractors/pipeExtractors.js} +6 -14
- package/dist/{extract-hast/readability.js → extractors/presets/takumi.js} +3 -3
- package/dist/{extract-hast → extractors/presets}/utils.js +1 -1
- package/dist/extractors/types.js +0 -0
- package/dist/html-to-mdast.js +2 -2
- package/dist/index.js +7 -4
- package/dist/loaders/puppeteer.js +1 -1
- package/dist/types/cli/commands/webforai/loadHtml.js.map +1 -1
- package/dist/types/constants.d.ts +4 -0
- package/dist/types/constants.js.map +1 -0
- package/dist/types/extractors/index.d.ts +3 -0
- package/dist/types/extractors/index.js.map +1 -0
- package/dist/types/extractors/pipeExtractors.d.ts +7 -0
- package/dist/types/extractors/pipeExtractors.js.map +1 -0
- package/dist/types/extractors/presets/takumi.d.ts +10 -0
- package/dist/types/extractors/presets/takumi.js.map +1 -0
- package/dist/types/extractors/presets/utils.js.map +1 -0
- package/dist/types/extractors/types.d.ts +7 -0
- package/dist/types/extractors/types.js.map +1 -0
- package/dist/types/html-to-mdast.d.ts +2 -2
- package/dist/types/html-to-mdast.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/loaders/puppeteer.js.map +1 -1
- package/package.json +3 -3
- package/dist/cjs/extract-hast/strongly.js +0 -57
- package/dist/extract-hast/strongly.js +0 -34
- package/dist/types/extract-hast/index.d.ts +0 -15
- package/dist/types/extract-hast/index.js.map +0 -1
- package/dist/types/extract-hast/readability.d.ts +0 -3
- package/dist/types/extract-hast/readability.js.map +0 -1
- package/dist/types/extract-hast/strongly.d.ts +0 -3
- package/dist/types/extract-hast/strongly.js.map +0 -1
- package/dist/types/extract-hast/utils.js.map +0 -1
- /package/dist/cjs/{extract-hast → extractors/presets}/utils.js +0 -0
- /package/dist/types/{extract-hast → extractors/presets}/utils.d.ts +0 -0
package/dist/bin.js
CHANGED
|
@@ -6,19 +6,11 @@ import { program } from "commander";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "webforai",
|
|
9
|
-
version: "
|
|
9
|
+
version: "2.0.0",
|
|
10
10
|
description: "A library that provides a web interface for AI",
|
|
11
11
|
author: "inaridiy",
|
|
12
|
-
license: "
|
|
13
|
-
keywords: [
|
|
14
|
-
"web",
|
|
15
|
-
"ai",
|
|
16
|
-
"html",
|
|
17
|
-
"html2md",
|
|
18
|
-
"markdown",
|
|
19
|
-
"mdast",
|
|
20
|
-
"hast"
|
|
21
|
-
],
|
|
12
|
+
license: "Apache-2.0",
|
|
13
|
+
keywords: ["web", "ai", "html", "html2md", "markdown", "mdast", "hast"],
|
|
22
14
|
repository: {
|
|
23
15
|
type: "git",
|
|
24
16
|
url: "https://github.com/inaridiy/webforai.git"
|
|
@@ -28,14 +20,11 @@ var package_default = {
|
|
|
28
20
|
"copy:package.cjs.json": "pnpm ncp ./package.cjs.json ./dist/cjs/package.json && pnpm ncp ./package.cjs.json ./dist/types/package.json ",
|
|
29
21
|
clean: "rimraf dist",
|
|
30
22
|
build: "pnpm clean && tsx build.ts && pnpm copy:package.cjs.json",
|
|
31
|
-
|
|
23
|
+
typecheck: "tsc --noEmit",
|
|
32
24
|
prerelease: "pnpm build",
|
|
33
25
|
release: "np"
|
|
34
26
|
},
|
|
35
|
-
files: [
|
|
36
|
-
"dist",
|
|
37
|
-
"!dist/types/**/*.js"
|
|
38
|
-
],
|
|
27
|
+
files: ["dist", "!dist/types/**/*.js"],
|
|
39
28
|
main: "dist/cjs/index.js",
|
|
40
29
|
type: "module",
|
|
41
30
|
module: "dist/index.js",
|
|
@@ -75,21 +64,11 @@ var package_default = {
|
|
|
75
64
|
},
|
|
76
65
|
typesVersions: {
|
|
77
66
|
"*": {
|
|
78
|
-
types: [
|
|
79
|
-
|
|
80
|
-
],
|
|
81
|
-
"loaders/
|
|
82
|
-
|
|
83
|
-
],
|
|
84
|
-
"loaders/cf-puppeteer": [
|
|
85
|
-
"./dist/types/loaders/cf-puppeteer.d.ts"
|
|
86
|
-
],
|
|
87
|
-
"loaders/fetch": [
|
|
88
|
-
"./dist/types/loaders/fetch.d.ts"
|
|
89
|
-
],
|
|
90
|
-
"loaders/puppeteer": [
|
|
91
|
-
"./dist/types/loaders/puppeteer.d.ts"
|
|
92
|
-
]
|
|
67
|
+
types: ["./dist/types/index.d.ts"],
|
|
68
|
+
"loaders/playwright": ["./dist/types/loaders/playwright.d.ts"],
|
|
69
|
+
"loaders/cf-puppeteer": ["./dist/types/loaders/cf-puppeteer.d.ts"],
|
|
70
|
+
"loaders/fetch": ["./dist/types/loaders/fetch.d.ts"],
|
|
71
|
+
"loaders/puppeteer": ["./dist/types/loaders/puppeteer.d.ts"]
|
|
93
72
|
}
|
|
94
73
|
},
|
|
95
74
|
peerDependencies: {
|
|
@@ -157,12 +136,34 @@ import pc2 from "picocolors";
|
|
|
157
136
|
import { fromHtml } from "hast-util-from-html";
|
|
158
137
|
import { toMdast } from "hast-util-to-mdast";
|
|
159
138
|
|
|
160
|
-
// src/extract-
|
|
139
|
+
// src/extract-mdast.ts
|
|
140
|
+
import { filter } from "unist-util-filter";
|
|
141
|
+
var DECLATION_TYPES = ["blockquote", "strong", "emphasis", "delete"];
|
|
142
|
+
var emptyDeclarationFilter = (node) => {
|
|
143
|
+
if (!DECLATION_TYPES.includes(node.type)) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
if (node.children.length === 0) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
};
|
|
151
|
+
var extractMdast = (node) => {
|
|
152
|
+
const extracted = filter(node, (node2) => {
|
|
153
|
+
if (!emptyDeclarationFilter(node2)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
});
|
|
158
|
+
return extracted;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// src/extractors/presets/takumi.ts
|
|
161
162
|
import { select, selectAll } from "hast-util-select";
|
|
162
163
|
import { toString as hastToString } from "hast-util-to-string";
|
|
163
|
-
import { filter } from "unist-util-filter";
|
|
164
|
+
import { filter as filter2 } from "unist-util-filter";
|
|
164
165
|
|
|
165
|
-
// src/
|
|
166
|
+
// src/extractors/presets/utils.ts
|
|
166
167
|
var matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}`;
|
|
167
168
|
var classnames = (element) => {
|
|
168
169
|
if (Array.isArray(element.properties.className)) {
|
|
@@ -177,7 +178,7 @@ var isStrInclude = (value, match) => {
|
|
|
177
178
|
return false;
|
|
178
179
|
};
|
|
179
180
|
|
|
180
|
-
// src/
|
|
181
|
+
// src/extractors/presets/takumi.ts
|
|
181
182
|
var UNLIKELY_ROLES = ["menu", "menubar", "complementary", "navigation", "alert", "alertdialog", "dialog"];
|
|
182
183
|
var REGEXPS = {
|
|
183
184
|
hidden: /hidden|invisible|fallback-image/i,
|
|
@@ -256,15 +257,15 @@ var removeEmptyFilter = (node, _lang) => {
|
|
|
256
257
|
}
|
|
257
258
|
return true;
|
|
258
259
|
};
|
|
259
|
-
var
|
|
260
|
+
var takumiExtractor = (params) => {
|
|
260
261
|
const { hast, lang = "en" } = params;
|
|
261
262
|
const body = select("body", hast) ?? hast;
|
|
262
|
-
const metadataFilteredHast =
|
|
263
|
+
const metadataFilteredHast = filter2(body, (node) => metadataFilter(node));
|
|
263
264
|
const metadataFilteredHastText = metadataFilteredHast && hastToString(metadataFilteredHast);
|
|
264
265
|
if (!(metadataFilteredHast && metadataFilteredHastText)) {
|
|
265
266
|
return body;
|
|
266
267
|
}
|
|
267
|
-
const baseFilterd =
|
|
268
|
+
const baseFilterd = filter2(metadataFilteredHast, (node) => universalElementFilter(node));
|
|
268
269
|
const baseFilterdText = baseFilterd ? hastToString(baseFilterd) : "";
|
|
269
270
|
const [baseTree, baseText] = baseFilterdText.length > metadataFilteredHastText.length / 3 || baseFilterdText.length > 5e3 ? [baseFilterd, baseFilterdText] : [metadataFilteredHast, metadataFilteredHastText];
|
|
270
271
|
let minimalLength = lang in BASE_MINIMAL_LENGTH ? BASE_MINIMAL_LENGTH[lang] : 500;
|
|
@@ -291,7 +292,7 @@ var readabilityExtractHast = (params) => {
|
|
|
291
292
|
break;
|
|
292
293
|
}
|
|
293
294
|
}
|
|
294
|
-
const finalFilteredTree =
|
|
295
|
+
const finalFilteredTree = filter2(extractedTree, (node) => {
|
|
295
296
|
if (!removeEmptyFilter(node, lang)) {
|
|
296
297
|
return false;
|
|
297
298
|
}
|
|
@@ -304,53 +305,22 @@ var readabilityExtractHast = (params) => {
|
|
|
304
305
|
return finalTree;
|
|
305
306
|
};
|
|
306
307
|
|
|
307
|
-
// src/
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
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;
|
|
311
|
-
var stronglyExtractHast = (params) => {
|
|
312
|
-
const { hast } = params;
|
|
313
|
-
const selectors = ["article", "#article", "#content", "main", "div.container"];
|
|
314
|
-
let selectedElement = hast;
|
|
315
|
-
for (const selector of selectors) {
|
|
316
|
-
const element = select2(selector, hast);
|
|
317
|
-
if (element) {
|
|
318
|
-
selectedElement = element;
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
const removedElements = filter2(selectedElement, (node) => {
|
|
323
|
-
if (node.type === "comment") {
|
|
324
|
-
return false;
|
|
325
|
-
}
|
|
326
|
-
if (node.type !== "element") {
|
|
327
|
-
return true;
|
|
328
|
-
}
|
|
329
|
-
const element = node;
|
|
330
|
-
const elementName = `${element.tagName} ${element.properties.id} ${element.properties.className}`;
|
|
331
|
-
if (REMOVE_REGEX.test(elementName)) {
|
|
332
|
-
return false;
|
|
333
|
-
}
|
|
334
|
-
return true;
|
|
335
|
-
});
|
|
336
|
-
return removedElements;
|
|
308
|
+
// src/constants.ts
|
|
309
|
+
var PRESET_EXTRACTORS = {
|
|
310
|
+
takumi: takumiExtractor
|
|
337
311
|
};
|
|
312
|
+
var DEFAULT_EXTRACTORS = ["takumi"];
|
|
338
313
|
|
|
339
|
-
// src/
|
|
340
|
-
var
|
|
341
|
-
strongly: stronglyExtractHast,
|
|
342
|
-
readability: readabilityExtractHast
|
|
343
|
-
};
|
|
344
|
-
var DEFAULT_EXTRACT_HAST = ["readability"];
|
|
345
|
-
var extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
314
|
+
// src/extractors/pipeExtractors.ts
|
|
315
|
+
var pipeExtractors = (params, extractors = DEFAULT_EXTRACTORS) => {
|
|
346
316
|
const { hast, lang } = params;
|
|
347
317
|
const _extractors = Array.isArray(extractors) ? extractors : [extractors];
|
|
348
318
|
const extracted = _extractors.reduce((acc, extractor) => {
|
|
349
319
|
if (extractor === false) {
|
|
350
320
|
return acc;
|
|
351
321
|
}
|
|
352
|
-
if (typeof extractor === "string" && extractor in
|
|
353
|
-
return
|
|
322
|
+
if (typeof extractor === "string" && extractor in PRESET_EXTRACTORS) {
|
|
323
|
+
return PRESET_EXTRACTORS[extractor]({ hast: acc, lang });
|
|
354
324
|
}
|
|
355
325
|
if (typeof extractor === "function") {
|
|
356
326
|
return extractor({ hast: acc, lang });
|
|
@@ -360,28 +330,6 @@ var extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
|
360
330
|
return extracted;
|
|
361
331
|
};
|
|
362
332
|
|
|
363
|
-
// src/extract-mdast.ts
|
|
364
|
-
import { filter as filter3 } from "unist-util-filter";
|
|
365
|
-
var DECLATION_TYPES = ["blockquote", "strong", "emphasis", "delete"];
|
|
366
|
-
var emptyDeclarationFilter = (node) => {
|
|
367
|
-
if (!DECLATION_TYPES.includes(node.type)) {
|
|
368
|
-
return true;
|
|
369
|
-
}
|
|
370
|
-
if (node.children.length === 0) {
|
|
371
|
-
return false;
|
|
372
|
-
}
|
|
373
|
-
return true;
|
|
374
|
-
};
|
|
375
|
-
var extractMdast = (node) => {
|
|
376
|
-
const extracted = filter3(node, (node2) => {
|
|
377
|
-
if (!emptyDeclarationFilter(node2)) {
|
|
378
|
-
return false;
|
|
379
|
-
}
|
|
380
|
-
return true;
|
|
381
|
-
});
|
|
382
|
-
return extracted;
|
|
383
|
-
};
|
|
384
|
-
|
|
385
333
|
// src/mdast-handlers/custom-a-handler.ts
|
|
386
334
|
import { defaultHandlers } from "hast-util-to-mdast";
|
|
387
335
|
import { toString as hastToString2 } from "hast-util-to-string";
|
|
@@ -470,7 +418,7 @@ var customCodeHandler = (state, node) => {
|
|
|
470
418
|
};
|
|
471
419
|
|
|
472
420
|
// src/mdast-handlers/custom-div-handler.ts
|
|
473
|
-
import { select as
|
|
421
|
+
import { select as select2 } from "hast-util-select";
|
|
474
422
|
import { defaultHandlers as defaultHandlers2 } from "hast-util-to-mdast";
|
|
475
423
|
import { toString as hastToString3 } from "hast-util-to-string";
|
|
476
424
|
import { toText as toText2 } from "hast-util-to-text";
|
|
@@ -507,7 +455,7 @@ var customDivHandler = (state, node) => {
|
|
|
507
455
|
if (codeBlock && classNames.some((className) => CODE_BLOCK_REGEX.test(className))) {
|
|
508
456
|
const codeBlockClassNames = codeBlock.type === "element" ? codeBlock.properties.className ?? [] : [];
|
|
509
457
|
const codeValue = trimTrailingLines2(toText2(codeBlock)).trim();
|
|
510
|
-
const filenameElement =
|
|
458
|
+
const filenameElement = select2(CODE_FILENAME_SELECTORS, node);
|
|
511
459
|
const fileLang = filenameElement ? hastToString3(filenameElement).match(/\.(\w+)$/)?.[1] : null;
|
|
512
460
|
const classLang = [...classNames, ...codeBlockClassNames].map((className) => {
|
|
513
461
|
const match = LANGUAGE_MATCH_REGEX2.map((regex) => className.match(regex)).find((match2) => match2);
|
|
@@ -554,9 +502,9 @@ var mathHandler = (state, node) => {
|
|
|
554
502
|
};
|
|
555
503
|
|
|
556
504
|
// src/utils/hast-utils.ts
|
|
557
|
-
import { select as
|
|
505
|
+
import { select as select3, selectAll as selectAll2 } from "hast-util-select";
|
|
558
506
|
var getLangFromHast = (node) => {
|
|
559
|
-
const html =
|
|
507
|
+
const html = select3("html", node);
|
|
560
508
|
if (html && typeof html.properties.lang === "string") {
|
|
561
509
|
return html.properties.lang;
|
|
562
510
|
}
|
|
@@ -600,7 +548,7 @@ var htmlToMdast = (htmlOrHast, options) => {
|
|
|
600
548
|
const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
|
|
601
549
|
const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || getLangFromStr(htmlOrHast), fromHtml(htmlOrHast, { fragment: true })] : [defaultLang || getLangFromHast(htmlOrHast), htmlOrHast];
|
|
602
550
|
const url = defaultUrl || getUrlFromHast(hast);
|
|
603
|
-
const extractedHast =
|
|
551
|
+
const extractedHast = pipeExtractors({ hast, lang, url }, extractors);
|
|
604
552
|
const mdast = toMdast(extractedHast, {
|
|
605
553
|
handlers: {
|
|
606
554
|
math: mathHandler,
|
|
@@ -842,9 +790,9 @@ var inputSourcePath = async () => {
|
|
|
842
790
|
};
|
|
843
791
|
|
|
844
792
|
// src/cli/helpers/selectExtractMode.ts
|
|
845
|
-
import { select as
|
|
793
|
+
import { select as select4 } from "@clack/prompts";
|
|
846
794
|
var selectExtractMode = async () => {
|
|
847
|
-
const result = await
|
|
795
|
+
const result = await select4({
|
|
848
796
|
message: "Select processing mode:",
|
|
849
797
|
options: MODES.map((mode) => ({ value: mode, label: mode })),
|
|
850
798
|
initialValue: MODES[0]
|
|
@@ -854,14 +802,14 @@ var selectExtractMode = async () => {
|
|
|
854
802
|
};
|
|
855
803
|
|
|
856
804
|
// src/cli/helpers/selectLoader.ts
|
|
857
|
-
import { select as
|
|
805
|
+
import { select as select5 } from "@clack/prompts";
|
|
858
806
|
var loadersHint = {
|
|
859
807
|
fetch: "Fetch HTML content from the given URL",
|
|
860
808
|
playwright: "Retrieve HTML content after rendering using Playwright; Playwright must be installed in advance.",
|
|
861
809
|
puppeteer: "Retrieve HTML content after rendering using Puppeteer; Puppeteer must be installed in advance."
|
|
862
810
|
};
|
|
863
811
|
var selectLoader = async () => {
|
|
864
|
-
const result = await
|
|
812
|
+
const result = await select5({
|
|
865
813
|
message: "Select loader:",
|
|
866
814
|
initialValue: "fetch",
|
|
867
815
|
options: LOADERS.map((mode) => ({ value: mode, label: mode, hint: loadersHint[mode] || "" }))
|
|
@@ -872,6 +820,7 @@ var selectLoader = async () => {
|
|
|
872
820
|
|
|
873
821
|
// src/cli/commands/webforai/loadHtml.ts
|
|
874
822
|
import fs4 from "node:fs/promises";
|
|
823
|
+
import { fileURLToPath } from "node:url";
|
|
875
824
|
import { log } from "@clack/prompts";
|
|
876
825
|
import boxen from "boxen";
|
|
877
826
|
import pc from "picocolors";
|
|
@@ -939,7 +888,7 @@ var checkPlaywrightAvailable = async () => {
|
|
|
939
888
|
};
|
|
940
889
|
var getPlaywrightVersion = async () => {
|
|
941
890
|
const path3 = await import.meta.resolve("playwright-core/package.json");
|
|
942
|
-
const pwPackageJson = await fs4.readFile(path3
|
|
891
|
+
const pwPackageJson = await fs4.readFile(fileURLToPath(path3), "utf-8").then((res) => JSON.parse(res.toString())).catch(() => null);
|
|
943
892
|
return pwPackageJson?.version;
|
|
944
893
|
};
|
|
945
894
|
var loadHtml3 = async (sourcePath, loader, options) => {
|
|
@@ -0,0 +1,34 @@
|
|
|
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 constants_exports = {};
|
|
20
|
+
__export(constants_exports, {
|
|
21
|
+
DEFAULT_EXTRACTORS: () => DEFAULT_EXTRACTORS,
|
|
22
|
+
PRESET_EXTRACTORS: () => PRESET_EXTRACTORS
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(constants_exports);
|
|
25
|
+
var import_takumi = require("./extractors/presets/takumi");
|
|
26
|
+
const PRESET_EXTRACTORS = {
|
|
27
|
+
takumi: import_takumi.takumiExtractor
|
|
28
|
+
};
|
|
29
|
+
const DEFAULT_EXTRACTORS = ["takumi"];
|
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
+
0 && (module.exports = {
|
|
32
|
+
DEFAULT_EXTRACTORS,
|
|
33
|
+
PRESET_EXTRACTORS
|
|
34
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
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 extractors_exports = {};
|
|
20
|
+
__export(extractors_exports, {
|
|
21
|
+
pipeExtractors: () => import_pipeExtractors.pipeExtractors,
|
|
22
|
+
takumiExtractor: () => import_takumi.takumiExtractor
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(extractors_exports);
|
|
25
|
+
var import_pipeExtractors = require("./pipeExtractors");
|
|
26
|
+
var import_takumi = require("./presets/takumi");
|
|
27
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
+
0 && (module.exports = {
|
|
29
|
+
pipeExtractors,
|
|
30
|
+
takumiExtractor
|
|
31
|
+
});
|
|
@@ -16,29 +16,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
22
|
-
PRESET_EXTRACT_HAST: () => PRESET_EXTRACT_HAST,
|
|
23
|
-
extractHast: () => extractHast
|
|
19
|
+
var pipeExtractors_exports = {};
|
|
20
|
+
__export(pipeExtractors_exports, {
|
|
21
|
+
pipeExtractors: () => pipeExtractors
|
|
24
22
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
const PRESET_EXTRACT_HAST = {
|
|
29
|
-
strongly: import_strongly.stronglyExtractHast,
|
|
30
|
-
readability: import_readability.readabilityExtractHast
|
|
31
|
-
};
|
|
32
|
-
const DEFAULT_EXTRACT_HAST = ["readability"];
|
|
33
|
-
const extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
23
|
+
module.exports = __toCommonJS(pipeExtractors_exports);
|
|
24
|
+
var import_constants = require("../constants");
|
|
25
|
+
const pipeExtractors = (params, extractors = import_constants.DEFAULT_EXTRACTORS) => {
|
|
34
26
|
const { hast, lang } = params;
|
|
35
27
|
const _extractors = Array.isArray(extractors) ? extractors : [extractors];
|
|
36
28
|
const extracted = _extractors.reduce((acc, extractor) => {
|
|
37
29
|
if (extractor === false) {
|
|
38
30
|
return acc;
|
|
39
31
|
}
|
|
40
|
-
if (typeof extractor === "string" && extractor in
|
|
41
|
-
return
|
|
32
|
+
if (typeof extractor === "string" && extractor in import_constants.PRESET_EXTRACTORS) {
|
|
33
|
+
return import_constants.PRESET_EXTRACTORS[extractor]({ hast: acc, lang });
|
|
42
34
|
}
|
|
43
35
|
if (typeof extractor === "function") {
|
|
44
36
|
return extractor({ hast: acc, lang });
|
|
@@ -49,7 +41,5 @@ const extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
|
49
41
|
};
|
|
50
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
51
43
|
0 && (module.exports = {
|
|
52
|
-
|
|
53
|
-
PRESET_EXTRACT_HAST,
|
|
54
|
-
extractHast
|
|
44
|
+
pipeExtractors
|
|
55
45
|
});
|
|
@@ -16,11 +16,11 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var takumi_exports = {};
|
|
20
|
+
__export(takumi_exports, {
|
|
21
|
+
takumiExtractor: () => takumiExtractor
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
23
|
+
module.exports = __toCommonJS(takumi_exports);
|
|
24
24
|
var import_hast_util_select = require("hast-util-select");
|
|
25
25
|
var import_hast_util_to_string = require("hast-util-to-string");
|
|
26
26
|
var import_unist_util_filter = require("unist-util-filter");
|
|
@@ -103,7 +103,7 @@ const removeEmptyFilter = (node, _lang) => {
|
|
|
103
103
|
}
|
|
104
104
|
return true;
|
|
105
105
|
};
|
|
106
|
-
const
|
|
106
|
+
const takumiExtractor = (params) => {
|
|
107
107
|
const { hast, lang = "en" } = params;
|
|
108
108
|
const body = (0, import_hast_util_select.select)("body", hast) ?? hast;
|
|
109
109
|
const metadataFilteredHast = (0, import_unist_util_filter.filter)(body, (node) => metadataFilter(node));
|
|
@@ -152,5 +152,5 @@ const readabilityExtractHast = (params) => {
|
|
|
152
152
|
};
|
|
153
153
|
// Annotate the CommonJS export names for ESM import in node:
|
|
154
154
|
0 && (module.exports = {
|
|
155
|
-
|
|
155
|
+
takumiExtractor
|
|
156
156
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -23,8 +23,8 @@ __export(html_to_mdast_exports, {
|
|
|
23
23
|
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
|
-
var import_extract_hast = require("./extract-hast");
|
|
27
26
|
var import_extract_mdast = require("./extract-mdast");
|
|
27
|
+
var import_extractors = require("./extractors");
|
|
28
28
|
var import_custom_a_handler = require("./mdast-handlers/custom-a-handler");
|
|
29
29
|
var import_custom_code_handler = require("./mdast-handlers/custom-code-handler");
|
|
30
30
|
var import_custom_div_handler = require("./mdast-handlers/custom-div-handler");
|
|
@@ -36,7 +36,7 @@ const htmlToMdast = (htmlOrHast, options) => {
|
|
|
36
36
|
const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
|
|
37
37
|
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];
|
|
38
38
|
const url = defaultUrl || (0, import_hast_utils.getUrlFromHast)(hast);
|
|
39
|
-
const extractedHast = (0,
|
|
39
|
+
const extractedHast = (0, import_extractors.pipeExtractors)({ hast, lang, url }, extractors);
|
|
40
40
|
const mdast = (0, import_hast_util_to_mdast.toMdast)(extractedHast, {
|
|
41
41
|
handlers: {
|
|
42
42
|
math: import_math_handler.mathHandler,
|
package/dist/cjs/index.js
CHANGED
|
@@ -18,25 +18,25 @@ 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
|
-
DEFAULT_EXTRACT_HAST: () => import_extract_hast.DEFAULT_EXTRACT_HAST,
|
|
22
|
-
PRESET_EXTRACT_HAST: () => import_extract_hast.PRESET_EXTRACT_HAST,
|
|
23
21
|
htmlToMarkdown: () => import_html_to_markdown.htmlToMarkdown,
|
|
24
22
|
htmlToMdast: () => import_html_to_mdast.htmlToMdast,
|
|
25
23
|
mdastSplitter: () => import_md_splitter.mdastSplitter,
|
|
26
|
-
mdastToMarkdown: () => import_mdast_to_markdown.mdastToMarkdown
|
|
24
|
+
mdastToMarkdown: () => import_mdast_to_markdown.mdastToMarkdown,
|
|
25
|
+
pipeExtractors: () => import_extractors.pipeExtractors,
|
|
26
|
+
takumiExtractor: () => import_extractors.takumiExtractor
|
|
27
27
|
});
|
|
28
28
|
module.exports = __toCommonJS(src_exports);
|
|
29
29
|
var import_html_to_markdown = require("./html-to-markdown");
|
|
30
30
|
var import_md_splitter = require("./md-splitter");
|
|
31
31
|
var import_html_to_mdast = require("./html-to-mdast");
|
|
32
32
|
var import_mdast_to_markdown = require("./mdast-to-markdown");
|
|
33
|
-
var
|
|
33
|
+
var import_extractors = require("./extractors");
|
|
34
34
|
// Annotate the CommonJS export names for ESM import in node:
|
|
35
35
|
0 && (module.exports = {
|
|
36
|
-
DEFAULT_EXTRACT_HAST,
|
|
37
|
-
PRESET_EXTRACT_HAST,
|
|
38
36
|
htmlToMarkdown,
|
|
39
37
|
htmlToMdast,
|
|
40
38
|
mdastSplitter,
|
|
41
|
-
mdastToMarkdown
|
|
39
|
+
mdastToMarkdown,
|
|
40
|
+
pipeExtractors,
|
|
41
|
+
takumiExtractor
|
|
42
42
|
});
|
|
@@ -44,7 +44,7 @@ const loadHtml = async (url, ctx) => {
|
|
|
44
44
|
await page.goto(url);
|
|
45
45
|
const html = await page.content();
|
|
46
46
|
await Promise.race([page.waitForNetworkIdle(), sleep(1e4)]);
|
|
47
|
-
await
|
|
47
|
+
await browser.close();
|
|
48
48
|
return html;
|
|
49
49
|
};
|
|
50
50
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
// src/
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
var PRESET_EXTRACT_HAST = {
|
|
5
|
-
strongly: stronglyExtractHast,
|
|
6
|
-
readability: readabilityExtractHast
|
|
7
|
-
};
|
|
8
|
-
var DEFAULT_EXTRACT_HAST = ["readability"];
|
|
9
|
-
var extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
1
|
+
// src/extractors/pipeExtractors.ts
|
|
2
|
+
import { DEFAULT_EXTRACTORS, PRESET_EXTRACTORS } from "../constants.js";
|
|
3
|
+
var pipeExtractors = (params, extractors = DEFAULT_EXTRACTORS) => {
|
|
10
4
|
const { hast, lang } = params;
|
|
11
5
|
const _extractors = Array.isArray(extractors) ? extractors : [extractors];
|
|
12
6
|
const extracted = _extractors.reduce((acc, extractor) => {
|
|
13
7
|
if (extractor === false) {
|
|
14
8
|
return acc;
|
|
15
9
|
}
|
|
16
|
-
if (typeof extractor === "string" && extractor in
|
|
17
|
-
return
|
|
10
|
+
if (typeof extractor === "string" && extractor in PRESET_EXTRACTORS) {
|
|
11
|
+
return PRESET_EXTRACTORS[extractor]({ hast: acc, lang });
|
|
18
12
|
}
|
|
19
13
|
if (typeof extractor === "function") {
|
|
20
14
|
return extractor({ hast: acc, lang });
|
|
@@ -24,7 +18,5 @@ var extractHast = (params, extractors = DEFAULT_EXTRACT_HAST) => {
|
|
|
24
18
|
return extracted;
|
|
25
19
|
};
|
|
26
20
|
export {
|
|
27
|
-
|
|
28
|
-
PRESET_EXTRACT_HAST,
|
|
29
|
-
extractHast
|
|
21
|
+
pipeExtractors
|
|
30
22
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/extractors/presets/takumi.ts
|
|
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";
|
|
@@ -81,7 +81,7 @@ var removeEmptyFilter = (node, _lang) => {
|
|
|
81
81
|
}
|
|
82
82
|
return true;
|
|
83
83
|
};
|
|
84
|
-
var
|
|
84
|
+
var takumiExtractor = (params) => {
|
|
85
85
|
const { hast, lang = "en" } = params;
|
|
86
86
|
const body = select("body", hast) ?? hast;
|
|
87
87
|
const metadataFilteredHast = filter(body, (node) => metadataFilter(node));
|
|
@@ -129,5 +129,5 @@ var readabilityExtractHast = (params) => {
|
|
|
129
129
|
return finalTree;
|
|
130
130
|
};
|
|
131
131
|
export {
|
|
132
|
-
|
|
132
|
+
takumiExtractor
|
|
133
133
|
};
|
|
File without changes
|
package/dist/html-to-mdast.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/html-to-mdast.ts
|
|
2
2
|
import { fromHtml } from "hast-util-from-html";
|
|
3
3
|
import { toMdast } from "hast-util-to-mdast";
|
|
4
|
-
import { extractHast } from "./extract-hast/index.js";
|
|
5
4
|
import { extractMdast } from "./extract-mdast.js";
|
|
5
|
+
import { pipeExtractors } from "./extractors/index.js";
|
|
6
6
|
import { customAHandler } from "./mdast-handlers/custom-a-handler.js";
|
|
7
7
|
import { customCodeHandler } from "./mdast-handlers/custom-code-handler.js";
|
|
8
8
|
import { customDivHandler } from "./mdast-handlers/custom-div-handler.js";
|
|
@@ -14,7 +14,7 @@ var htmlToMdast = (htmlOrHast, options) => {
|
|
|
14
14
|
const { extractors, url: defaultUrl, lang: defaultLang } = options || {};
|
|
15
15
|
const [lang, hast] = typeof htmlOrHast === "string" ? [defaultLang || getLangFromStr(htmlOrHast), fromHtml(htmlOrHast, { fragment: true })] : [defaultLang || getLangFromHast(htmlOrHast), htmlOrHast];
|
|
16
16
|
const url = defaultUrl || getUrlFromHast(hast);
|
|
17
|
-
const extractedHast =
|
|
17
|
+
const extractedHast = pipeExtractors({ hast, lang, url }, extractors);
|
|
18
18
|
const mdast = toMdast(extractedHast, {
|
|
19
19
|
handlers: {
|
|
20
20
|
math: mathHandler,
|