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.
Files changed (49) hide show
  1. package/LICENSE +201 -21
  2. package/README.md +45 -111
  3. package/dist/bin.js +59 -110
  4. package/dist/cjs/constants.js +34 -0
  5. package/dist/cjs/extractors/index.js +31 -0
  6. package/dist/cjs/{extract-hast/index.js → extractors/pipeExtractors.js} +9 -19
  7. package/dist/cjs/{extract-hast/readability.js → extractors/presets/takumi.js} +6 -6
  8. package/dist/cjs/extractors/types.js +16 -0
  9. package/dist/cjs/html-to-mdast.js +2 -2
  10. package/dist/cjs/index.js +7 -7
  11. package/dist/cjs/loaders/puppeteer.js +1 -1
  12. package/dist/constants.js +10 -0
  13. package/dist/extractors/index.js +9 -0
  14. package/dist/{extract-hast/index.js → extractors/pipeExtractors.js} +6 -14
  15. package/dist/{extract-hast/readability.js → extractors/presets/takumi.js} +3 -3
  16. package/dist/{extract-hast → extractors/presets}/utils.js +1 -1
  17. package/dist/extractors/types.js +0 -0
  18. package/dist/html-to-mdast.js +2 -2
  19. package/dist/index.js +7 -4
  20. package/dist/loaders/puppeteer.js +1 -1
  21. package/dist/types/cli/commands/webforai/loadHtml.js.map +1 -1
  22. package/dist/types/constants.d.ts +4 -0
  23. package/dist/types/constants.js.map +1 -0
  24. package/dist/types/extractors/index.d.ts +3 -0
  25. package/dist/types/extractors/index.js.map +1 -0
  26. package/dist/types/extractors/pipeExtractors.d.ts +7 -0
  27. package/dist/types/extractors/pipeExtractors.js.map +1 -0
  28. package/dist/types/extractors/presets/takumi.d.ts +10 -0
  29. package/dist/types/extractors/presets/takumi.js.map +1 -0
  30. package/dist/types/extractors/presets/utils.js.map +1 -0
  31. package/dist/types/extractors/types.d.ts +7 -0
  32. package/dist/types/extractors/types.js.map +1 -0
  33. package/dist/types/html-to-mdast.d.ts +2 -2
  34. package/dist/types/html-to-mdast.js.map +1 -1
  35. package/dist/types/index.d.ts +1 -1
  36. package/dist/types/index.js.map +1 -1
  37. package/dist/types/loaders/puppeteer.js.map +1 -1
  38. package/package.json +3 -3
  39. package/dist/cjs/extract-hast/strongly.js +0 -57
  40. package/dist/extract-hast/strongly.js +0 -34
  41. package/dist/types/extract-hast/index.d.ts +0 -15
  42. package/dist/types/extract-hast/index.js.map +0 -1
  43. package/dist/types/extract-hast/readability.d.ts +0 -3
  44. package/dist/types/extract-hast/readability.js.map +0 -1
  45. package/dist/types/extract-hast/strongly.d.ts +0 -3
  46. package/dist/types/extract-hast/strongly.js.map +0 -1
  47. package/dist/types/extract-hast/utils.js.map +0 -1
  48. /package/dist/cjs/{extract-hast → extractors/presets}/utils.js +0 -0
  49. /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: "1.6.2",
9
+ version: "2.0.0",
10
10
  description: "A library that provides a web interface for AI",
11
11
  author: "inaridiy",
12
- license: "MIT",
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
- test: 'echo "Error: no test specified"',
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
- "./dist/types/index.d.ts"
80
- ],
81
- "loaders/playwright": [
82
- "./dist/types/loaders/playwright.d.ts"
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-hast/readability.ts
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/extract-hast/utils.ts
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/extract-hast/readability.ts
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 readabilityExtractHast = (params) => {
260
+ var takumiExtractor = (params) => {
260
261
  const { hast, lang = "en" } = params;
261
262
  const body = select("body", hast) ?? hast;
262
- const metadataFilteredHast = filter(body, (node) => metadataFilter(node));
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 = filter(metadataFilteredHast, (node) => universalElementFilter(node));
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 = filter(extractedTree, (node) => {
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/extract-hast/strongly.ts
308
- import { select as select2 } from "hast-util-select";
309
- import { filter as filter2 } from "unist-util-filter";
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/extract-hast/index.ts
340
- var PRESET_EXTRACT_HAST = {
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 PRESET_EXTRACT_HAST) {
353
- return PRESET_EXTRACT_HAST[extractor]({ hast: acc, lang });
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 select3 } from "hast-util-select";
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 = select3(CODE_FILENAME_SELECTORS, node);
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 select4, selectAll as selectAll2 } from "hast-util-select";
505
+ import { select as select3, selectAll as selectAll2 } from "hast-util-select";
558
506
  var getLangFromHast = (node) => {
559
- const html = select4("html", node);
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 = extractHast({ hast, lang, url }, extractors);
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 select5 } from "@clack/prompts";
793
+ import { select as select4 } from "@clack/prompts";
846
794
  var selectExtractMode = async () => {
847
- const result = await select5({
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 select6 } from "@clack/prompts";
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 select6({
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.replace("file://", ""), "utf-8").then((res) => JSON.parse(res.toString())).catch(() => null);
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 extract_hast_exports = {};
20
- __export(extract_hast_exports, {
21
- DEFAULT_EXTRACT_HAST: () => DEFAULT_EXTRACT_HAST,
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(extract_hast_exports);
26
- var import_readability = require("./readability");
27
- var import_strongly = require("./strongly");
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 PRESET_EXTRACT_HAST) {
41
- return PRESET_EXTRACT_HAST[extractor]({ hast: acc, lang });
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
- DEFAULT_EXTRACT_HAST,
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 readability_exports = {};
20
- __export(readability_exports, {
21
- readabilityExtractHast: () => readabilityExtractHast
19
+ var takumi_exports = {};
20
+ __export(takumi_exports, {
21
+ takumiExtractor: () => takumiExtractor
22
22
  });
23
- module.exports = __toCommonJS(readability_exports);
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 readabilityExtractHast = (params) => {
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
- readabilityExtractHast
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, import_extract_hast.extractHast)({ hast, lang, url }, extractors);
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 import_extract_hast = require("./extract-hast/index");
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 page.close();
47
+ await browser.close();
48
48
  return html;
49
49
  };
50
50
  // Annotate the CommonJS export names for ESM import in node:
@@ -0,0 +1,10 @@
1
+ // src/constants.ts
2
+ import { takumiExtractor } from "./extractors/presets/takumi.js";
3
+ var PRESET_EXTRACTORS = {
4
+ takumi: takumiExtractor
5
+ };
6
+ var DEFAULT_EXTRACTORS = ["takumi"];
7
+ export {
8
+ DEFAULT_EXTRACTORS,
9
+ PRESET_EXTRACTORS
10
+ };
@@ -0,0 +1,9 @@
1
+ // src/extractors/index.ts
2
+ import {
3
+ pipeExtractors
4
+ } from "./pipeExtractors.js";
5
+ import { takumiExtractor } from "./presets/takumi.js";
6
+ export {
7
+ pipeExtractors,
8
+ takumiExtractor
9
+ };
@@ -1,20 +1,14 @@
1
- // src/extract-hast/index.ts
2
- import { readabilityExtractHast } from "./readability.js";
3
- import { stronglyExtractHast } from "./strongly.js";
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 PRESET_EXTRACT_HAST) {
17
- return PRESET_EXTRACT_HAST[extractor]({ hast: acc, lang });
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
- DEFAULT_EXTRACT_HAST,
28
- PRESET_EXTRACT_HAST,
29
- extractHast
21
+ pipeExtractors
30
22
  };
@@ -1,4 +1,4 @@
1
- // src/extract-hast/readability.ts
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 readabilityExtractHast = (params) => {
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
- readabilityExtractHast
132
+ takumiExtractor
133
133
  };
@@ -1,4 +1,4 @@
1
- // src/extract-hast/utils.ts
1
+ // src/extractors/presets/utils.ts
2
2
  var matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")}`;
3
3
  var classnames = (element) => {
4
4
  if (Array.isArray(element.properties.className)) {
File without changes
@@ -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 = extractHast({ hast, lang, url }, extractors);
17
+ const extractedHast = pipeExtractors({ hast, lang, url }, extractors);
18
18
  const mdast = toMdast(extractedHast, {
19
19
  handlers: {
20
20
  math: mathHandler,