Files
CRM_ENVR/src/lib/blocked-extensions.ts
T
2026-06-26 14:31:38 +02:00

92 lines
1.8 KiB
TypeScript

export const BLOCKED_CODE_EXTENSIONS = new Set([
"py", "pyc", "pyo", "pyw", "pyx", "ipynb",
"js", "mjs", "cjs", "jsx", "ts", "tsx",
"php", "phtml", "php3", "php4", "php5",
"rb", "erb",
"pl", "pm",
"lua",
"sh", "bash", "zsh", "ksh", "fish",
"ps1", "psm1", "psd1",
"bat", "cmd",
"vbs",
"applescript",
"ahk",
"au3",
"tcl",
"c", "h", "cpp", "cc", "cxx", "hpp", "hh", "hxx",
"cs", "vb",
"java", "class", "jar",
"go",
"rs",
"swift",
"kt", "kts",
"scala",
"groovy", "gradle",
"d",
"nim",
"cr",
"zig",
"v",
"vhd", "vhdl",
"asm", "s",
"f", "f90", "f95", "for",
"pas", "pp",
"ada", "adb", "ads",
"cob", "cbl",
"hs", "lhs",
"ml", "mli",
"fs", "fsx", "fsi",
"clj", "cljs", "cljc", "edn",
"lisp", "lsp",
"scm", "ss",
"rkt",
"ex", "exs",
"erl", "hrl",
"jl",
"elm",
"purs",
"re", "rei",
"sol",
"move",
"pro",
"m",
"html", "htm",
"css", "scss", "sass", "less",
"vue", "svelte",
"json5",
"o", "so", "dll", "exe", "dylib",
"wasm", "wat", "bin",
"out",
"deb", "rpm",
"app", "apk", "ipa",
"sql", "psql",
"ino", "pde",
"sas", "do",
])
export function getAllExtensions(name: string): string[] {
const parts = name.split(".")
if (parts.length <= 1) return []
return parts.slice(1).map((ext) => ext.toLowerCase())
}
export function hasBlockedCodeExtension(name: string): boolean {
const exts = getAllExtensions(name)
return exts.some((ext) => BLOCKED_CODE_EXTENSIONS.has(ext))
}
export function filterBlockedFiles<T extends { name: string }>(
files: T[],
): { allowed: T[]; rejected: T[] } {
const allowed: T[] = []
const rejected: T[] = []
for (const f of files) {
if (hasBlockedCodeExtension(f.name)) {
rejected.push(f)
} else {
allowed.push(f)
}
}
return { allowed, rejected }
}