52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { AppVersion } from "@/lib/types";
|
|
import { promises as fs } from "fs";
|
|
import { NextResponse } from "next/server";
|
|
import path from "path";
|
|
|
|
export const dynamic = "force-static";
|
|
|
|
const jsonDir = "public/json";
|
|
const versionsFileName = "versions.json";
|
|
const encoding = "utf-8";
|
|
|
|
const getVersions = async () => {
|
|
const filePath = path.resolve(jsonDir, versionsFileName);
|
|
const fileContent = await fs.readFile(filePath, encoding);
|
|
const versions: AppVersion = JSON.parse(fileContent);
|
|
return versions;
|
|
};
|
|
|
|
|
|
export async function GET(request: Request) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const slug = searchParams.get("slug");
|
|
|
|
if (!slug) {
|
|
return NextResponse.json({ error: "Missing slug parameter" }, { status: 400 });
|
|
}
|
|
console.log("Slug: ", slug);
|
|
const versions = await getVersions();
|
|
|
|
const cleanedSlug = slug.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
|
|
const matchedVersion = Object.values(versions).find(
|
|
(version: AppVersion) => {
|
|
const versionNameParts = version.name.split('/');
|
|
const cleanedVersionName = versionNameParts[1]?.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
return cleanedVersionName === cleanedSlug;
|
|
}
|
|
);
|
|
|
|
console.log("Matched Version: ", matchedVersion);
|
|
if (!matchedVersion) {
|
|
return NextResponse.json({name: "No version found", version: "No Version found"});
|
|
}
|
|
return NextResponse.json(matchedVersion);
|
|
|
|
} catch (error) {
|
|
const msg = console.error(error);
|
|
return NextResponse.json({name: msg, version: "No version found - Error"});
|
|
}
|
|
}
|