diff --git a/app/[id]/page.tsx b/app/[id]/page.tsx
index 948cea3..b3a3e9f 100644
--- a/app/[id]/page.tsx
+++ b/app/[id]/page.tsx
@@ -4,11 +4,6 @@ import { useRouter } from 'next/navigation';
import Prism from 'prismjs';
import { use, useEffect, useState } from 'react';
-import 'prismjs/components/prism-bash';
-import 'prismjs/components/prism-javascript';
-import 'prismjs/components/prism-json';
-import 'prismjs/components/prism-python';
-import 'prismjs/components/prism-typescript';
import 'prismjs/plugins/line-numbers/prism-line-numbers.css';
import 'prismjs/plugins/line-numbers/prism-line-numbers.js';
import 'prismjs/themes/prism-tomorrow.css';
@@ -19,6 +14,15 @@ import LoadingPaste from '@/components/paste/LoadingPaste';
import PasswordForm from '@/components/paste/PasswordForm';
import PasteSidebar from '@/components/paste/PasteSidebar';
+
+async function loadLanguage(lang: string) {
+ try {
+ await import(`prismjs/components/prism-${lang}.js`);
+ } catch (err) {
+ console.warn(`[Prism] Language '${lang}' introuvable. Fallback -> plaintext`);
+ }
+}
+
export default function PastePage({
params,
}: {
@@ -54,29 +58,38 @@ export default function PastePage({
const data = await res.json();
setPaste(data);
- if (data.content.includes('function') || data.content.includes('const')) {
- setLanguage('language-javascript');
- } else if (data.content.includes('import') || data.content.includes('export')) {
- setLanguage('language-typescript');
- } else if (data.content.includes('{') && data.content.includes('}')) {
- setLanguage('language-json');
+ const content = data.content.toLowerCase();
+
+ let detected = 'javascript';
+ if (content.includes('select ') || content.includes('insert into')) {
+ detected = 'sql';
+ } else if (content.includes('function') || content.includes('const')) {
+ detected = 'javascript';
+ } else if (content.includes('import ') || content.includes('export ')) {
+ detected = 'typescript';
+ } else if (content.includes('{') && content.includes('}')) {
+ detected = 'json';
+ } else if (content.includes('#include') || content.includes('int main')) {
+ detected = 'cpp';
+ } else if (content.includes('arduino')) {
+ detected = 'arduino';
} else {
- setLanguage('language-bash');
+ detected = 'bash';
}
+ await loadLanguage(detected);
+ setLanguage(`language-${detected}`);
+
setLoading(false);
};
useEffect(() => {
fetchPaste();
- // eslint-disable-next-line react-hooks/exhaustive-deps
}, [id]);
useEffect(() => {
- if (paste?.content) {
- Prism.highlightAll();
- }
- }, [paste]);
+ if (paste?.content) Prism.highlightAll();
+ }, [paste, language]);
if (loading) return ;
@@ -91,5 +104,4 @@ export default function PastePage({
);
-
-}
\ No newline at end of file
+}
diff --git a/prisma/altbin.db b/prisma/altbin.db
index cbb331b..9fba8ff 100644
Binary files a/prisma/altbin.db and b/prisma/altbin.db differ