refactor(import/mime): split CODE_MIME_TYPES Record into two separate objects

CODE_MIME_TYPES -> as a Set -> as we only care about the existance of those types
CODE_MIME_TYPES_OVERRIDE -> as a Map with those keys and the "overwrite" values as associated value

-> this way  we don't have to unnecessarily store additional boolean values for everything *but* those hand ful of mime types

-> also I've sorted the items alphabetically, while I was at it
This commit is contained in:
Panagiotis Papadopoulos 2025-01-19 14:50:59 +01:00
parent 1405e22f89
commit 815929c376

View File

@ -4,45 +4,48 @@ import mimeTypes from "mime-types";
import path from "path"; import path from "path";
import type { TaskData } from "../task_context_interface.js"; import type { TaskData } from "../task_context_interface.js";
const CODE_MIME_TYPES: Record<string, boolean | string> = { const CODE_MIME_TYPES = new Set([
"text/plain": true, "application/json",
"text/x-csrc": true, "message/http",
"text/x-c++src": true, "text/css",
"text/x-csharp": true, "text/html",
"text/x-clojure": true, "text/plain",
"text/css": true, "text/x-clojure",
"text/x-dockerfile": true, "text/x-csharp",
"text/x-erlang": true, "text/x-c++src",
"text/x-feature": true, "text/x-csrc",
"text/x-go": true, "text/x-dockerfile",
"text/x-groovy": true, "text/x-erlang",
"text/x-haskell": true, "text/x-feature",
"text/html": true, "text/x-go",
"message/http": true, "text/x-groovy",
"text/x-java": true, "text/x-haskell",
"application/javascript": "application/javascript;env=frontend", "text/x-java",
"application/x-javascript": "application/javascript;env=frontend", "text/x-kotlin",
"application/json": true, "text/x-lua",
"text/x-kotlin": true, "text/x-markdown",
"text/x-stex": true, "text/xml",
"text/x-lua": true, "text/x-objectivec",
"text/x-pascal",
"text/x-perl",
"text/x-php",
"text/x-python",
"text/x-ruby",
"text/x-rustsrc",
"text/x-scala",
"text/x-sh",
"text/x-sql",
"text/x-stex",
"text/x-swift",
"text/x-yaml"
]);
const CODE_MIME_TYPES_OVERRIDE = new Map([
["application/javascript", "application/javascript;env=frontend"],
["application/x-javascript", "application/javascript;env=frontend"],
// possibly later migrate to text/markdown as primary MIME // possibly later migrate to text/markdown as primary MIME
"text/markdown": "text/x-markdown", ["text/markdown", "text/x-markdown"]
"text/x-markdown": true, ]);
"text/x-objectivec": true,
"text/x-pascal": true,
"text/x-perl": true,
"text/x-php": true,
"text/x-python": true,
"text/x-ruby": true,
"text/x-rustsrc": true,
"text/x-scala": true,
"text/x-sh": true,
"text/x-sql": true,
"text/x-swift": true,
"text/xml": true,
"text/x-yaml": true
};
// extensions missing in mime-db // extensions missing in mime-db
const EXTENSION_TO_MIME: Record<string, string> = { const EXTENSION_TO_MIME: Record<string, string> = {
@ -85,7 +88,7 @@ function getType(options: TaskData, mime: string) {
if (options.textImportedAsText && (mime === "text/html" || ["text/markdown", "text/x-markdown"].includes(mime))) { if (options.textImportedAsText && (mime === "text/html" || ["text/markdown", "text/x-markdown"].includes(mime))) {
return "text"; return "text";
} else if (options.codeImportedAsCode && mime in CODE_MIME_TYPES) { } else if (options.codeImportedAsCode && CODE_MIME_TYPES.has(mime)) {
return "code"; return "code";
} else if (mime.startsWith("image/")) { } else if (mime.startsWith("image/")) {
return "image"; return "image";
@ -96,12 +99,11 @@ function getType(options: TaskData, mime: string) {
function normalizeMimeType(mime: string) { function normalizeMimeType(mime: string) {
mime = mime ? mime.toLowerCase() : ""; mime = mime ? mime.toLowerCase() : "";
const mappedMime = CODE_MIME_TYPES[mime];
if (mappedMime === true) { if (CODE_MIME_TYPES.has(mime)) {
return mime; return mime;
} else if (typeof mappedMime === "string") { } else if (CODE_MIME_TYPES_OVERRIDE.get(mime)) {
return mappedMime; return CODE_MIME_TYPES_OVERRIDE.get(mime);
} }
return undefined; return undefined;