1
0
mirror of https://github.com/kamranahmedse/developer-roadmap.git synced 2025-08-22 17:02:58 +02:00
This commit is contained in:
Arik Chakma
2025-08-18 14:20:23 +06:00
parent e94d6a8daf
commit 15273cd6f7
65 changed files with 598 additions and 257 deletions

View File

@@ -3,8 +3,22 @@ type RoadmapOpenGraphQuery = {
resourceId: string;
};
export function getOpenGraphImageUrl(params: RoadmapOpenGraphQuery) {
return `${import.meta.env.DEV ? 'http://localhost:3000' : 'https://roadmap.sh'}/og/${params.group}/${params.resourceId}`;
export function getOpenGraphImageUrl(
params: RoadmapOpenGraphQuery,
query?: Record<string, string>,
) {
const baseUrl = import.meta.env.DEV
? 'http://localhost:3000'
: 'https://roadmap.sh';
const url = new URL(`${baseUrl}/og/${params.group}/${params.resourceId}`);
if (query) {
Object.entries(query).forEach(([key, value]) => {
url.searchParams.set(key, value);
});
}
return String(url);
}
export async function getDefaultOpenGraphImageBuffer() {
@@ -15,11 +29,18 @@ export async function getDefaultOpenGraphImageBuffer() {
export async function getResourceOpenGraph(
type: 'roadmap' | 'guide' | 'best-practice',
resourceId: string,
query?: Record<string, string>,
) {
const url = new URL(`${import.meta.env.PUBLIC_API_URL}/v1-open-graph`);
url.searchParams.set('type', type);
url.searchParams.set('resourceId', resourceId);
url.searchParams.set('variant', 'image');
if (query) {
Object.entries(query).forEach(([key, value]) => {
url.searchParams.set(key, value);
});
}
const response = await fetch(url.toString());
return response.text();

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -12,10 +12,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -3,7 +3,7 @@ import {
getDefaultOpenGraphImageBuffer,
getResourceOpenGraph,
} from '../../../lib/open-graph';
import {Transformer} from "@napi-rs/image";
import { Transformer } from '@napi-rs/image';
export const prerender = false;
@@ -13,6 +13,7 @@ type Params = {
export const GET: APIRoute<any, Params> = async (context) => {
const { slug } = context.params;
const { searchParams } = context.url;
if (!slug) {
const buffer = await getDefaultOpenGraphImageBuffer();
@@ -23,9 +24,14 @@ export const GET: APIRoute<any, Params> = async (context) => {
});
}
const svg = await getResourceOpenGraph('guide', slug);
const svg = await getResourceOpenGraph(
'guide',
slug,
Object.fromEntries(searchParams.entries()),
);
const transformer = Transformer.fromSvg(svg).crop(0, 0, 1200, 630);
// @ts-expect-error - Buffer is not assignable to BodyInit
return new Response(await transformer.png(), {
headers: {
'Content-Type': 'image/png',

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---

View File

@@ -10,10 +10,15 @@ const guide = await getOfficialGuide(guideId, roadmapId);
const ogImageUrl =
guide?.seo?.ogImageUrl ||
getOpenGraphImageUrl({
group: 'guide',
resourceId: guideId,
});
getOpenGraphImageUrl(
{
group: 'guide',
resourceId: guideId,
},
{
roadmapId,
},
);
const permalink = `/${roadmapId}/${guideId}`;
---
@@ -28,4 +33,3 @@ const permalink = `/${roadmapId}/${guideId}`;
<GuideContent guide={guide!} client:load />
<div slot='changelog-banner'></div>
</BaseLayout>