46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
export const dynamic = 'force-static';
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
export async function GET() {
|
|
try {
|
|
const dirPath = path.join(process.cwd(), 'assets', 'big-models');
|
|
if (!fs.existsSync(dirPath)) {
|
|
return new Response(JSON.stringify({ models: [] }), {
|
|
status: 200,
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
}
|
|
|
|
const files = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
const models = files
|
|
.filter((ent) => ent.isFile() && (ent.name.toLowerCase().endsWith('.glb') || ent.name.toLowerCase().endsWith('.gltf')))
|
|
.map((ent) => {
|
|
const filename = ent.name;
|
|
const base = filename.replace(/\.(glb|gltf)$/i, '');
|
|
let title = base;
|
|
title = title.replace(/^AerBIM-Monitor_ASM-HT-Viewer_/i, '');
|
|
title = title.replace(/_/g, ' ');
|
|
title = title.replace(/\bLevel\b/gi, 'Уровень');
|
|
title = title.replace(/\bcustom\s*prop\b/gi, '');
|
|
title = title.replace(/\bcustom\b/gi, '');
|
|
title = title.replace(/\bprop\b/gi, '');
|
|
title = title.replace(/\s{2,}/g, ' ').trim();
|
|
|
|
return { name: title, path: `/static-models/${filename}` };
|
|
});
|
|
|
|
return new Response(JSON.stringify({ models }), {
|
|
status: 200,
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
} catch (error) {
|
|
console.error('[big-models/list] Error listing models:', error);
|
|
const msg = error instanceof Error ? error.message : String(error);
|
|
return new Response(JSON.stringify({ error: msg, models: [] }), {
|
|
status: 500,
|
|
headers: { 'Content-Type': 'application/json' },
|
|
});
|
|
}
|
|
} |