mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-08-22 17:02:58 +02:00
wip
This commit is contained in:
@@ -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();
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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',
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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}`;
|
||||
---
|
||||
|
@@ -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>
|
||||
|
||||
|
Reference in New Issue
Block a user