webforai
Version:
A library that provides a web interface for AI
74 lines (73 loc) • 3.17 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var detect_code_lang_exports = {};
__export(detect_code_lang_exports, {
detectLanguage: () => detectLanguage
});
module.exports = __toCommonJS(detect_code_lang_exports);
const languages = [
["bash", [/#!(\/usr)?\/bin\/bash/g, 500], [/\b(if|elif|then|fi|echo)\b|\$/g, 10]],
["html", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^\s+<!DOCTYPE\s+html/g, 500]],
["http", [/^(GET|HEAD|POST|PUT|DELETE|PATCH|HTTP)\b/g, 500]],
[
"ts",
[/(import .* from|export \*|export const|const .* = await)/g, 400],
[
/\b(console|await|async|function|undefined|export|import|this|class|for|let|const|map|join|require|implements|interface|namespace)\b/g,
10
]
],
[
"tsx",
[/(import .* from|export \*|export const)/g, 400],
[/\b(react|next|FC)\b/g, 200],
[
/\b(console|await|async|function|export|undefined|import|this|class|for|let|const|map|join|require|implements|interface)\b/g,
10
]
],
["py", [/\b(def|print|class|and|or|lambda)\b/g, 10]],
["sql", [/\b(SELECT|INSERT|FROM)\b/g, 50]],
["pl", [/#!(\/usr)?\/bin\/perl/g, 500], [/\b(use|print)\b|\$/g, 10]],
["lua", [/#!(\/usr)?\/bin\/lua/g, 500]],
["make", [/\b(ifneq|endif|if|elif|then|fi|echo|.PHONY|^[a-z]+ ?:$)\b|\$/gm, 10]],
["uri", [/https?:|mailto:|tel:|ftp:/g, 30]],
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
["diff", [/^[+><-]/gm, 10], [/^@@ ?[-+,0-9 ]+ ?@@/gm, 25]],
["md", [/^(>|\t\*|\t\d+.)/gm, 10], [/\[.*\](.*)/g, 10]],
["docker", [/^(FROM|ENTRYPOINT|RUN)/gm, 500]],
["xml", [/<\/?[a-z-]+[^\n>]*>/g, 10], [/^<\?xml/g, 500]],
["c", [/#include\b|\bprintf\s+\(/g, 100]],
["rs", [/^\s+(use|fn|mut|match)\b/gm, 100]],
["go", [/\b(func|fmt|package)\b/g, 100]],
["java", [/^import\s+java/gm, 500]],
["asm", [/^(section|global main|extern|\t(call|mov|ret))/gm, 100]],
["css", [/^(@import|@page|@media|(\.|#)[a-z]+)/gm, 20]],
["json", [/\b(true|false|null|\{})\b|\"[^"]+\":/g, 10]],
["yaml", [/^(\s+)?[a-z][a-z0-9]*:/gim, 10]]
];
const detectLanguage = (code) => {
return languages.map(
([lang, ...features]) => [lang, features.reduce((acc, [match, score]) => acc + [...code.matchAll(match)].length * score, 0)]
).filter(([_, score]) => score > 20).sort((a, b) => b[1] - a[1])[0]?.[0] || "plain";
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
detectLanguage
});