import { FastifyPluginAsync } from "fastify";
import fp from "fastify-plugin";
import getFilePathExt from "file-extension";
import imageExts from "image-extensions";
import isImageFilePath from "is-image";
import languagesMap from "language-map";
import languageDetect from "language-detect";
import mimeTypes from "mime-db";
import { makeCodeAnalysisService } from "../services/codeAnalysis";
const serviceKey = "codeAnalysisService";
export const codeAnalysisPlugin: FastifyPluginAsync<never> = fp(
async (server) => {
const service = makeCodeAnalysisService({
getFilePathExt,
imageExts,
isImageFilePath,
languageDetect,
languagesMap,
extsMimeTypesMap: Object.entries(mimeTypes).reduce(
(acc, [mimeType, metas]) => {
const { extensions } = metas;
if (extensions == null) return acc;
extensions.forEach((ext) => {
acc = {
...acc,
[ext]: mimeType,
};
});
return acc;
},
{} as {
[extension: string]: string;
}
),
});
server.decorate(serviceKey, {
getter: () => service,
});
server.decorateRequest(serviceKey, {
getter: () => service,
});
}
);