webforai 1.1.6 → 1.2.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 +21 -21
- package/README.md +74 -74
- package/dist/cjs/extract-hast/readability.js +150 -0
- package/dist/cjs/extract-hast/strongly.js +0 -22
- package/dist/cjs/extract-hast/utils.js +55 -0
- package/dist/cjs/html-to-mdast.js +10 -6
- package/dist/cjs/mdast-handlers/custom-a-handler.js +4 -4
- package/dist/cjs/mdast-handlers/custom-div-handler.js +35 -31
- package/dist/cjs/mdast-handlers/custom-img-handler.js +33 -0
- package/dist/cjs/mdast-handlers/custom-table-handler.js +37 -0
- package/dist/cjs/utils/detect-code-lang.js +73 -0
- package/dist/extract-hast/readability.js +127 -0
- package/dist/extract-hast/strongly.js +0 -22
- package/dist/extract-hast/utils.js +29 -0
- package/dist/html-to-mdast.js +10 -6
- package/dist/mdast-handlers/custom-a-handler.js +4 -4
- package/dist/mdast-handlers/custom-div-handler.js +35 -31
- package/dist/mdast-handlers/custom-img-handler.js +10 -0
- package/dist/mdast-handlers/custom-table-handler.js +14 -0
- package/dist/types/extract-hast/readability.d.ts +11 -0
- package/dist/types/extract-hast/readability.js.map +1 -0
- package/dist/types/extract-hast/strongly.js.map +1 -1
- package/dist/types/extract-hast/utils.d.ts +5 -0
- package/dist/types/extract-hast/utils.js.map +1 -0
- package/dist/types/html-to-mdast.d.ts +2 -1
- package/dist/types/html-to-mdast.js.map +1 -1
- package/dist/types/loaders/cf-puppeteer.d.ts +2 -1
- package/dist/types/mdast-handlers/custom-a-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.d.ts +4 -0
- package/dist/types/mdast-handlers/custom-img-handler.js.map +1 -0
- package/dist/types/mdast-handlers/custom-table-handler.d.ts +4 -0
- package/dist/types/mdast-handlers/custom-table-handler.js.map +1 -0
- package/dist/types/utils/detect-code-lang.d.ts +1 -0
- package/dist/types/utils/detect-code-lang.js.map +1 -0
- package/dist/utils/detect-code-lang.js +50 -0
- package/package.json +8 -5
|
@@ -0,0 +1,73 @@
|
|
|
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 detect_code_lang_exports = {};
|
|
20
|
+
__export(detect_code_lang_exports, {
|
|
21
|
+
detectLanguage: () => detectLanguage
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(detect_code_lang_exports);
|
|
24
|
+
const languages = [
|
|
25
|
+
["bash", [/#!(\/usr)?\/bin\/bash/g, 500], [/\b(if|elif|then|fi|echo)\b|\$/g, 10]],
|
|
26
|
+
["html", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^\s+<!DOCTYPE\s+html/g, 500]],
|
|
27
|
+
["http", [/^(GET|HEAD|POST|PUT|DELETE|PATCH|HTTP)\b/g, 500]],
|
|
28
|
+
[
|
|
29
|
+
"ts",
|
|
30
|
+
[/(import .* from|export \*|export const|const .* = await)/g, 400],
|
|
31
|
+
[
|
|
32
|
+
/\b(console|await|async|function|undefined|export|import|this|class|for|let|const|map|join|require|implements|interface|namespace)\b/g,
|
|
33
|
+
10
|
|
34
|
+
]
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
"tsx",
|
|
38
|
+
[/(import .* from|export \*|export const)/g, 400],
|
|
39
|
+
[/\b(react|next|FC)\b/g, 200],
|
|
40
|
+
[
|
|
41
|
+
/\b(console|await|async|function|export|undefined|import|this|class|for|let|const|map|join|require|implements|interface)\b/g,
|
|
42
|
+
10
|
|
43
|
+
]
|
|
44
|
+
],
|
|
45
|
+
["py", [/\b(def|print|class|and|or|lambda)\b/g, 10]],
|
|
46
|
+
["sql", [/\b(SELECT|INSERT|FROM)\b/g, 50]],
|
|
47
|
+
["pl", [/#!(\/usr)?\/bin\/perl/g, 500], [/\b(use|print)\b|\$/g, 10]],
|
|
48
|
+
["lua", [/#!(\/usr)?\/bin\/lua/g, 500]],
|
|
49
|
+
["make", [/\b(ifneq|endif|if|elif|then|fi|echo|.PHONY|^[a-z]+ ?:$)\b|\$/gm, 10]],
|
|
50
|
+
["uri", [/https?:|mailto:|tel:|ftp:/g, 30]],
|
|
51
|
+
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
|
|
52
|
+
["diff", [/^[+><-]/gm, 10], [/^@@ ?[-+,0-9 ]+ ?@@/gm, 25]],
|
|
53
|
+
["md", [/^(>|\t\*|\t\d+.)/gm, 10], [/\[.*\](.*)/g, 10]],
|
|
54
|
+
["docker", [/^(FROM|ENTRYPOINT|RUN)/gm, 500]],
|
|
55
|
+
["xml", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^<\?xml/g, 500]],
|
|
56
|
+
["c", [/#include\b|\bprintf\s+\(/g, 100]],
|
|
57
|
+
["rs", [/^\s+(use|fn|mut|match)\b/gm, 100]],
|
|
58
|
+
["go", [/\b(func|fmt|package)\b/g, 100]],
|
|
59
|
+
["java", [/^import\s+java/gm, 500]],
|
|
60
|
+
["asm", [/^(section|global main|extern|\t(call|mov|ret))/gm, 100]],
|
|
61
|
+
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
|
|
62
|
+
["json", [/\b(true|false|null|\{})\b|\"[^"]+\":/g, 10]],
|
|
63
|
+
["yaml", [/^(\s+)?[a-z][a-z0-9]*:/gim, 10]]
|
|
64
|
+
];
|
|
65
|
+
const detectLanguage = (code) => {
|
|
66
|
+
return languages.map(
|
|
67
|
+
([lang, ...features]) => [lang, features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0)]
|
|
68
|
+
).filter(([_, score]) => score > 20).sort((a, b) => b[1] - a[1])[0]?.[0] || "plain";
|
|
69
|
+
};
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
detectLanguage
|
|
73
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// src/extract-hast/readability.ts
|
|
2
|
+
import { select, selectAll } from "hast-util-select";
|
|
3
|
+
import { toString } from "hast-util-to-string";
|
|
4
|
+
import { filter } from "unist-util-filter";
|
|
5
|
+
import { parents } from "unist-util-parents";
|
|
6
|
+
import { classnames, hasAncestors, isStrInclude, matchString } from "./utils.js";
|
|
7
|
+
var UNLIKELY_ROLES = ["menu", "menubar", "complementary", "navigation", "alert", "alertdialog", "dialog"];
|
|
8
|
+
var REGEXPS = {
|
|
9
|
+
hidden: /hidden|invisible|fallback-image/i,
|
|
10
|
+
byline: /byline|author|dateline|writtenby|p-author/i,
|
|
11
|
+
unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote|speechify-ignore/i,
|
|
12
|
+
okMaybeItsACandidate: /and|article|body|column|content|main|shadow|code/i
|
|
13
|
+
};
|
|
14
|
+
var BODY_SELECTORS = ["article", "#article", ".article_body", ".article-body", "#content", ".entry", "main"];
|
|
15
|
+
var PARAGRAPH_TAGS = ["p", "div", "section", "article", "main", "ul", "ol", "li"];
|
|
16
|
+
var BASE_MINIMAL_LENGTH = {
|
|
17
|
+
ja: 200,
|
|
18
|
+
en: 500
|
|
19
|
+
};
|
|
20
|
+
var tryGetLang = (node) => {
|
|
21
|
+
if (node.type !== "element")
|
|
22
|
+
return;
|
|
23
|
+
const element = node;
|
|
24
|
+
if (element.tagName !== "html")
|
|
25
|
+
return;
|
|
26
|
+
const langAttr = element.properties.lang || element.properties["xml:lang"];
|
|
27
|
+
if (langAttr)
|
|
28
|
+
return langAttr;
|
|
29
|
+
};
|
|
30
|
+
var metadataFilter = (node) => !["comment", "doctype"].includes(node.type);
|
|
31
|
+
var universalElementFilter = (node) => {
|
|
32
|
+
if (node.type !== "element")
|
|
33
|
+
return true;
|
|
34
|
+
const element = node;
|
|
35
|
+
if (["script", "aside"].includes(element.tagName))
|
|
36
|
+
return false;
|
|
37
|
+
if (["hidden", "aria-hidden"].some((key) => element.properties[key]))
|
|
38
|
+
return false;
|
|
39
|
+
if (classnames(element).some((classname) => REGEXPS.hidden.test(classname)))
|
|
40
|
+
return false;
|
|
41
|
+
if (element.tagName === "dialog")
|
|
42
|
+
return false;
|
|
43
|
+
if (element.properties.role === "dialog" && element.properties["aria-modal"])
|
|
44
|
+
return false;
|
|
45
|
+
if (element.properties.rel === "author" && isStrInclude(element.properties.itemprop, "author"))
|
|
46
|
+
return false;
|
|
47
|
+
if (REGEXPS.byline.test(matchString(element)))
|
|
48
|
+
return false;
|
|
49
|
+
if (element.properties.role && UNLIKELY_ROLES.includes(element.properties.role))
|
|
50
|
+
return false;
|
|
51
|
+
return true;
|
|
52
|
+
};
|
|
53
|
+
var unlikelyElementFilter = (node) => {
|
|
54
|
+
if (node.type !== "element")
|
|
55
|
+
return true;
|
|
56
|
+
const element = node;
|
|
57
|
+
const match = matchString(element);
|
|
58
|
+
if (["body", "article", "main", "section", "a"].includes(element.tagName))
|
|
59
|
+
return true;
|
|
60
|
+
if (hasAncestors(element, ["table", "code"], 3))
|
|
61
|
+
return true;
|
|
62
|
+
if (REGEXPS.unlikelyCandidates.test(match) && !REGEXPS.okMaybeItsACandidate.test(match))
|
|
63
|
+
return false;
|
|
64
|
+
return true;
|
|
65
|
+
};
|
|
66
|
+
var removeEmptyFilter = (node) => {
|
|
67
|
+
if (node.type !== "element")
|
|
68
|
+
return true;
|
|
69
|
+
const element = node;
|
|
70
|
+
if (!PARAGRAPH_TAGS.includes(element.tagName))
|
|
71
|
+
return true;
|
|
72
|
+
const text = toString(element);
|
|
73
|
+
if (text.length < 10)
|
|
74
|
+
return false;
|
|
75
|
+
return true;
|
|
76
|
+
};
|
|
77
|
+
var readabilityExtractHast = (hast) => {
|
|
78
|
+
const lang = String(select("html", hast)?.properties.lang || tryGetLang(hast) || "en");
|
|
79
|
+
const body = select("body", hast) ?? hast;
|
|
80
|
+
const proxiedHast = parents(body);
|
|
81
|
+
let baseFilterd = filter(proxiedHast, (node) => {
|
|
82
|
+
if (!metadataFilter(node))
|
|
83
|
+
return false;
|
|
84
|
+
if (!universalElementFilter(node))
|
|
85
|
+
return false;
|
|
86
|
+
return true;
|
|
87
|
+
});
|
|
88
|
+
if (!baseFilterd)
|
|
89
|
+
return { type: "root", children: [] };
|
|
90
|
+
const baseText = toString(baseFilterd);
|
|
91
|
+
let minimalLength = lang in BASE_MINIMAL_LENGTH ? BASE_MINIMAL_LENGTH[lang] : 500;
|
|
92
|
+
if (baseText.length > minimalLength) {
|
|
93
|
+
const filterd = filter(baseFilterd, (node) => {
|
|
94
|
+
if (!unlikelyElementFilter(node))
|
|
95
|
+
return false;
|
|
96
|
+
return true;
|
|
97
|
+
});
|
|
98
|
+
if (filterd)
|
|
99
|
+
baseFilterd = filterd;
|
|
100
|
+
} else
|
|
101
|
+
minimalLength = Math.max(0, baseText.length - 200);
|
|
102
|
+
let bodyTree = baseFilterd;
|
|
103
|
+
for (const selector of BODY_SELECTORS) {
|
|
104
|
+
const body2 = { type: "root", children: selectAll(selector, baseFilterd) };
|
|
105
|
+
const bodyText = toString(body2);
|
|
106
|
+
if (bodyText.length < 25)
|
|
107
|
+
continue;
|
|
108
|
+
const links = selectAll("a", body2);
|
|
109
|
+
const linkText = links.map((link) => toString(link)).join("");
|
|
110
|
+
const linkDensity = linkText.length / bodyText.length;
|
|
111
|
+
if (linkDensity > 0.4)
|
|
112
|
+
continue;
|
|
113
|
+
if (bodyText.length > minimalLength) {
|
|
114
|
+
bodyTree = body2;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const finalTree = filter(bodyTree, (node) => {
|
|
119
|
+
if (!removeEmptyFilter(node))
|
|
120
|
+
return false;
|
|
121
|
+
return true;
|
|
122
|
+
});
|
|
123
|
+
return finalTree;
|
|
124
|
+
};
|
|
125
|
+
export {
|
|
126
|
+
readabilityExtractHast
|
|
127
|
+
};
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
// src/extract-hast/strongly.ts
|
|
2
2
|
import { select } from "hast-util-select";
|
|
3
|
-
import { toText } from "hast-util-to-text";
|
|
4
3
|
import { filter } from "unist-util-filter";
|
|
5
|
-
var evaluateTextComplexity = (text) => {
|
|
6
|
-
const words = text.trim().split(/\s+/);
|
|
7
|
-
const wordCount = words.length;
|
|
8
|
-
const charCount = text.length;
|
|
9
|
-
const avgWordLength = charCount / wordCount;
|
|
10
|
-
const uniqueWords = new Set(words);
|
|
11
|
-
const uniqueWordCount = uniqueWords.size;
|
|
12
|
-
const complexityScore = avgWordLength * 0.4 + uniqueWordCount / wordCount * 100 * 0.6;
|
|
13
|
-
return {
|
|
14
|
-
wordCount,
|
|
15
|
-
charCount,
|
|
16
|
-
avgWordLength,
|
|
17
|
-
uniqueWordCount,
|
|
18
|
-
complexityScore
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
4
|
var REMOVE_REGEX = /fallback|icon|header|nav|speechify-ignore|assist|-ad-|banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|assist|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i;
|
|
22
|
-
var HIDDEN_REGEX = /hidden|^hid$| hid$| hid |^hid /i;
|
|
23
5
|
var stronglyExtractHast = (hast) => {
|
|
24
6
|
const selectors = ["article", "#article", "#content", "main", "div.container"];
|
|
25
7
|
let selectedElement = hast;
|
|
@@ -39,10 +21,6 @@ var stronglyExtractHast = (hast) => {
|
|
|
39
21
|
const elementName = `${element.tagName} ${element.properties.id} ${element.properties.className}`;
|
|
40
22
|
if (REMOVE_REGEX.test(elementName))
|
|
41
23
|
return false;
|
|
42
|
-
const isHidden = HIDDEN_REGEX.test(elementName);
|
|
43
|
-
const complexity = evaluateTextComplexity(toText(element));
|
|
44
|
-
if (isHidden && complexity.complexityScore < 40)
|
|
45
|
-
return false;
|
|
46
24
|
return true;
|
|
47
25
|
});
|
|
48
26
|
return removedElements;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/extract-hast/utils.ts
|
|
2
|
+
var matchString = (element) => `${element.tagName} ${element.properties.id} ${classnames(element).join(" ")} }`;
|
|
3
|
+
var classnames = (element) => {
|
|
4
|
+
if (Array.isArray(element.properties.className))
|
|
5
|
+
return element.properties.className;
|
|
6
|
+
return [];
|
|
7
|
+
};
|
|
8
|
+
var isStrInclude = (value, match) => {
|
|
9
|
+
if (typeof value === "string")
|
|
10
|
+
return value.includes(match);
|
|
11
|
+
return false;
|
|
12
|
+
};
|
|
13
|
+
var hasAncestors = (element, tagNames, depth = 3) => {
|
|
14
|
+
let parent = element.parent;
|
|
15
|
+
for (let i = 0; i < depth; i++) {
|
|
16
|
+
if (!parent || parent.type !== "element")
|
|
17
|
+
return false;
|
|
18
|
+
if (tagNames.includes(parent.tagName))
|
|
19
|
+
return true;
|
|
20
|
+
parent = parent.parent;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
export {
|
|
25
|
+
classnames,
|
|
26
|
+
hasAncestors,
|
|
27
|
+
isStrInclude,
|
|
28
|
+
matchString
|
|
29
|
+
};
|
package/dist/html-to-mdast.js
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
import { fromHtml } from "hast-util-from-html";
|
|
3
3
|
import { toMdast } from "hast-util-to-mdast";
|
|
4
4
|
import { stronglyExtractHast } from "./extract-hast/index.js";
|
|
5
|
+
import { readabilityExtractHast } from "./extract-hast/readability.js";
|
|
5
6
|
import { customAHandler } from "./mdast-handlers/custom-a-handler.js";
|
|
6
7
|
import { customDivHandler } from "./mdast-handlers/custom-div-handler.js";
|
|
8
|
+
import { customImgHandler } from "./mdast-handlers/custom-img-handler.js";
|
|
9
|
+
import { customTableHandler } from "./mdast-handlers/custom-table-handler.js";
|
|
7
10
|
import { mathHandler } from "./mdast-handlers/math-handler.js";
|
|
8
11
|
var PRESET_EXTRACT_HAST = {
|
|
9
|
-
strongly: stronglyExtractHast
|
|
12
|
+
strongly: stronglyExtractHast,
|
|
13
|
+
readability: readabilityExtractHast
|
|
10
14
|
};
|
|
11
|
-
var DEFAULT_EXTRACT_HAST = ["
|
|
15
|
+
var DEFAULT_EXTRACT_HAST = ["readability"];
|
|
12
16
|
var htmlToMdast = (html, options) => {
|
|
13
17
|
const { extractHast = DEFAULT_EXTRACT_HAST } = options || {};
|
|
14
18
|
const _extractHast = Array.isArray(extractHast) ? extractHast : [extractHast];
|
|
@@ -24,13 +28,13 @@ var htmlToMdast = (html, options) => {
|
|
|
24
28
|
}, hast) || hast;
|
|
25
29
|
const mdast = toMdast(extractedHast, {
|
|
26
30
|
handlers: {
|
|
27
|
-
div: customDivHandler,
|
|
28
31
|
math: mathHandler,
|
|
32
|
+
div: customDivHandler,
|
|
29
33
|
a: customAHandler({ asText: options?.linkAsText }),
|
|
34
|
+
img: customImgHandler({ hideImage: options?.hideImage }),
|
|
35
|
+
table: customTableHandler({ asText: options?.tableAsText }),
|
|
30
36
|
br: () => {
|
|
31
|
-
}
|
|
32
|
-
...options?.hideImage ? { img: () => {
|
|
33
|
-
} } : {}
|
|
37
|
+
}
|
|
34
38
|
}
|
|
35
39
|
});
|
|
36
40
|
return mdast;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// src/mdast-handlers/custom-a-handler.ts
|
|
2
2
|
import { defaultHandlers } from "hast-util-to-mdast";
|
|
3
|
+
import { toString } from "hast-util-to-string";
|
|
3
4
|
var customAHandler = (options) => (state, node) => {
|
|
4
5
|
if (options?.asText) {
|
|
5
|
-
const link2 =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return void 0;
|
|
6
|
+
const link2 = { type: "text", value: toString(node) };
|
|
7
|
+
state.patch(node, link2);
|
|
8
|
+
return link2;
|
|
9
9
|
}
|
|
10
10
|
const link = defaultHandlers.a(state, node);
|
|
11
11
|
if (link.children.length > 0)
|
|
@@ -1,40 +1,44 @@
|
|
|
1
1
|
// src/mdast-handlers/custom-div-handler.ts
|
|
2
|
+
import { select } from "hast-util-select";
|
|
2
3
|
import { defaultHandlers } from "hast-util-to-mdast";
|
|
4
|
+
import { toString } from "hast-util-to-string";
|
|
3
5
|
import { toText } from "hast-util-to-text";
|
|
4
6
|
import { trimTrailingLines } from "trim-trailing-lines";
|
|
7
|
+
import { detectLanguage } from "../utils/detect-code-lang.js";
|
|
8
|
+
var CODE_BLOCK_REGEX = /highlight-source|language-|codegroup|codeblock|code-block/i;
|
|
9
|
+
var CODE_FILENAME_SELECTORS = "[class*='fileName'],[class*='fileName'],[class*='title'],[class*='Title']";
|
|
10
|
+
var LANGUAGE_MATCH_REGEX = /language-(\w+)|highlight-source-(\w+)/;
|
|
11
|
+
var findRecursive = (array, condition, maxDepth = 3) => {
|
|
12
|
+
if (maxDepth <= 0)
|
|
13
|
+
return null;
|
|
14
|
+
for (const value of array) {
|
|
15
|
+
const result = condition(value);
|
|
16
|
+
if (Array.isArray(result))
|
|
17
|
+
return findRecursive(result, condition, maxDepth - 1);
|
|
18
|
+
if (result)
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
5
23
|
var customDivHandler = (state, node) => {
|
|
6
24
|
const classNames = Array.isArray(node.properties.className) ? node.properties.className : [];
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
break;
|
|
25
|
-
const lang = toText(node).split("\n")[0].split(".").slice(-1)[0];
|
|
26
|
-
highlightLanguage = lang;
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
if (highlightLanguage !== void 0) {
|
|
31
|
-
const code = node.children.find((child) => child.type === "element" && child.tagName === "pre") || node;
|
|
32
|
-
const result = {
|
|
33
|
-
type: "code",
|
|
34
|
-
lang: highlightLanguage,
|
|
35
|
-
meta: null,
|
|
36
|
-
value: trimTrailingLines(toText(code)).trim()
|
|
37
|
-
};
|
|
25
|
+
const codeBlock = findRecursive(node.children, (child) => {
|
|
26
|
+
if (child.type !== "element")
|
|
27
|
+
return false;
|
|
28
|
+
if (child.tagName === "pre")
|
|
29
|
+
return true;
|
|
30
|
+
return child.children.filter((child2) => child2.type === "element");
|
|
31
|
+
});
|
|
32
|
+
if (codeBlock && classNames.some((className) => CODE_BLOCK_REGEX.test(className))) {
|
|
33
|
+
const codeValue = trimTrailingLines(toText(codeBlock)).trim();
|
|
34
|
+
const filenameElement = select(CODE_FILENAME_SELECTORS, node);
|
|
35
|
+
const fileLang = filenameElement ? toString(filenameElement).match(/\.(\w+)$/)?.[1] : null;
|
|
36
|
+
const classLang = classNames.map((className) => {
|
|
37
|
+
const match = className.match(LANGUAGE_MATCH_REGEX);
|
|
38
|
+
return match?.[1] || match?.[2];
|
|
39
|
+
}).find((className) => className);
|
|
40
|
+
const lang = fileLang || classLang || detectLanguage(codeValue) || null;
|
|
41
|
+
const result = { type: "code", lang, meta: null, value: codeValue };
|
|
38
42
|
state.patch(node, result);
|
|
39
43
|
return result;
|
|
40
44
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// src/mdast-handlers/custom-img-handler.ts
|
|
2
|
+
import { defaultHandlers } from "hast-util-to-mdast";
|
|
3
|
+
var customImgHandler = (options) => (state, node) => {
|
|
4
|
+
if (options?.hideImage)
|
|
5
|
+
return void 0;
|
|
6
|
+
return defaultHandlers.image(state, node);
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
customImgHandler
|
|
10
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/mdast-handlers/custom-table-handler.ts
|
|
2
|
+
import { defaultHandlers } from "hast-util-to-mdast";
|
|
3
|
+
import { toText } from "hast-util-to-text";
|
|
4
|
+
var customTableHandler = (options) => (state, node) => {
|
|
5
|
+
if (options?.asText) {
|
|
6
|
+
const paragraph = { type: "paragraph", children: [{ type: "text", value: toText(node) }] };
|
|
7
|
+
state.patch(node, paragraph);
|
|
8
|
+
return paragraph;
|
|
9
|
+
}
|
|
10
|
+
return defaultHandlers.table(state, node);
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
customTableHandler
|
|
14
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Nodes as Hast } from "hast";
|
|
2
|
+
type ProxiedHast = Hast & {
|
|
3
|
+
parent: ProxiedHast | null;
|
|
4
|
+
};
|
|
5
|
+
declare module "hast" {
|
|
6
|
+
interface Element {
|
|
7
|
+
parent: ProxiedHast | null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare const readabilityExtractHast: (hast: Hast) => Hast;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readability.js","sourceRoot":"","sources":["../../../src/extract-hast/readability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strongly.js","sourceRoot":"","sources":["../../../src/extract-hast/strongly.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"strongly.js","sourceRoot":"","sources":["../../../src/extract-hast/strongly.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,YAAY,GACjB,iPAAiP,CAAC;AAEnP,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAU,EAAQ,EAAE;IACvD,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/E,IAAI,eAAe,GAAG,IAAI,CAAC;IAC3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACb,eAAe,GAAG,OAAO,CAAC;YAC1B,MAAM;QACP,CAAC;IACF,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;QACxD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,OAAO,GAAG,IAAe,CAAC;QAChC,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAClG,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO,eAAuB,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Element } from "hast";
|
|
2
|
+
export declare const matchString: (element: Element) => string;
|
|
3
|
+
export declare const classnames: (element: Element) => string[];
|
|
4
|
+
export declare const isStrInclude: (value: unknown, match: string) => boolean;
|
|
5
|
+
export declare const hasAncestors: (element: Element, tagNames: string[], depth?: number) => boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/extract-hast/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC/C,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAElF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC,UAAU,CAAC,SAAqB,CAAC;IACjG,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,EAAE;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,QAAkB,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IAC/E,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Nodes as Hast } from "hast";
|
|
2
2
|
import type { Nodes as Mdast } from "mdast";
|
|
3
|
-
type ExtractHast = ((hast: Hast) => Hast) | false | "strongly";
|
|
3
|
+
type ExtractHast = ((hast: Hast) => Hast) | false | "strongly" | "readability";
|
|
4
4
|
export type HtmlToMdastOptions = {
|
|
5
5
|
extractHast?: ExtractHast | ExtractHast[];
|
|
6
6
|
linkAsText?: boolean;
|
|
7
|
+
tableAsText?: boolean;
|
|
7
8
|
hideImage?: boolean;
|
|
8
9
|
};
|
|
9
10
|
export declare const htmlToMdast: (html: string, options?: HtmlToMdastOptions) => Mdast;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-to-mdast.js","sourceRoot":"","sources":["../../src/html-to-mdast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAI5D,MAAM,mBAAmB,GAAG;IAC3B,QAAQ,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"html-to-mdast.js","sourceRoot":"","sources":["../../src/html-to-mdast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAI5D,MAAM,mBAAmB,GAAG;IAC3B,QAAQ,EAAE,mBAAmB;IAC7B,WAAW,EAAE,sBAAsB;CACnC,CAAC;AAEF,MAAM,oBAAoB,GAAkB,CAAC,aAAa,CAAC,CAAC;AAS5D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,OAA4B,EAAS,EAAE;IAChF,MAAM,EAAE,WAAW,GAAG,oBAAoB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAE9E,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,aAAa,GAClB,YAAY,CAAC,MAAM,CAAO,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE;QAC9C,IAAI,WAAW,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC;QACtC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,IAAI,mBAAmB;YACxE,OAAO,mBAAmB,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,OAAO,WAAW,KAAK,UAAU;YAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;IAElB,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAE;QACpC,QAAQ,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,gBAAgB;YACrB,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YAClD,GAAG,EAAE,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YACxD,KAAK,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAC3D,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC;SACZ;KACD,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import puppeteer from "@cloudflare/puppeteer";
|
|
2
|
+
export declare const loadHtml: (url: string, ctx: puppeteer.BrowserWorker) => Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-a-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-a-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-a-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-a-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAC1B,CAAC,OAA8B,EAAU,EAAE,CAC3C,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAW,CAAC;QAC9D,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-div-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-div-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-div-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-div-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-img-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-img-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,CAAC,MAAM,gBAAgB,GAC5B,CAAC,OAAiC,EAAU,EAAE,CAC9C,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-table-handler.js","sourceRoot":"","sources":["../../../src/mdast-handlers/custom-table-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAC9B,CAAC,OAA8B,EAAU,EAAE,CAC3C,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACf,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,WAAoB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAW,CAAC,EAAE,CAAC;QAC7G,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC7B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const detectLanguage: (code: string) => "html" | "json" | "yaml" | "bash" | "http" | "ts" | "tsx" | "py" | "sql" | "pl" | "lua" | "make" | "uri" | "css" | "diff" | "md" | "docker" | "xml" | "c" | "rs" | "go" | "java" | "asm";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-code-lang.js","sourceRoot":"","sources":["../../../src/utils/detect-code-lang.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// src/utils/detect-code-lang.ts
|
|
2
|
+
var languages = [
|
|
3
|
+
["bash", [/#!(\/usr)?\/bin\/bash/g, 500], [/\b(if|elif|then|fi|echo)\b|\$/g, 10]],
|
|
4
|
+
["html", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^\s+<!DOCTYPE\s+html/g, 500]],
|
|
5
|
+
["http", [/^(GET|HEAD|POST|PUT|DELETE|PATCH|HTTP)\b/g, 500]],
|
|
6
|
+
[
|
|
7
|
+
"ts",
|
|
8
|
+
[/(import .* from|export \*|export const|const .* = await)/g, 400],
|
|
9
|
+
[
|
|
10
|
+
/\b(console|await|async|function|undefined|export|import|this|class|for|let|const|map|join|require|implements|interface|namespace)\b/g,
|
|
11
|
+
10
|
|
12
|
+
]
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"tsx",
|
|
16
|
+
[/(import .* from|export \*|export const)/g, 400],
|
|
17
|
+
[/\b(react|next|FC)\b/g, 200],
|
|
18
|
+
[
|
|
19
|
+
/\b(console|await|async|function|export|undefined|import|this|class|for|let|const|map|join|require|implements|interface)\b/g,
|
|
20
|
+
10
|
|
21
|
+
]
|
|
22
|
+
],
|
|
23
|
+
["py", [/\b(def|print|class|and|or|lambda)\b/g, 10]],
|
|
24
|
+
["sql", [/\b(SELECT|INSERT|FROM)\b/g, 50]],
|
|
25
|
+
["pl", [/#!(\/usr)?\/bin\/perl/g, 500], [/\b(use|print)\b|\$/g, 10]],
|
|
26
|
+
["lua", [/#!(\/usr)?\/bin\/lua/g, 500]],
|
|
27
|
+
["make", [/\b(ifneq|endif|if|elif|then|fi|echo|.PHONY|^[a-z]+ ?:$)\b|\$/gm, 10]],
|
|
28
|
+
["uri", [/https?:|mailto:|tel:|ftp:/g, 30]],
|
|
29
|
+
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
|
|
30
|
+
["diff", [/^[+><-]/gm, 10], [/^@@ ?[-+,0-9 ]+ ?@@/gm, 25]],
|
|
31
|
+
["md", [/^(>|\t\*|\t\d+.)/gm, 10], [/\[.*\](.*)/g, 10]],
|
|
32
|
+
["docker", [/^(FROM|ENTRYPOINT|RUN)/gm, 500]],
|
|
33
|
+
["xml", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^<\?xml/g, 500]],
|
|
34
|
+
["c", [/#include\b|\bprintf\s+\(/g, 100]],
|
|
35
|
+
["rs", [/^\s+(use|fn|mut|match)\b/gm, 100]],
|
|
36
|
+
["go", [/\b(func|fmt|package)\b/g, 100]],
|
|
37
|
+
["java", [/^import\s+java/gm, 500]],
|
|
38
|
+
["asm", [/^(section|global main|extern|\t(call|mov|ret))/gm, 100]],
|
|
39
|
+
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
|
|
40
|
+
["json", [/\b(true|false|null|\{})\b|\"[^"]+\":/g, 10]],
|
|
41
|
+
["yaml", [/^(\s+)?[a-z][a-z0-9]*:/gim, 10]]
|
|
42
|
+
];
|
|
43
|
+
var detectLanguage = (code) => {
|
|
44
|
+
return languages.map(
|
|
45
|
+
([lang, ...features]) => [lang, features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0)]
|
|
46
|
+
).filter(([_, score]) => score > 20).sort((a, b) => b[1] - a[1])[0]?.[0] || "plain";
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
detectLanguage
|
|
50
|
+
};
|