Skip to content

Commit 2849af0

Browse files
committed
refactor: correctly generate routes
1 parent 90d1920 commit 2849af0

File tree

5 files changed

+87
-88
lines changed

5 files changed

+87
-88
lines changed

apps/website/src/app/docs/[...slug]/page.tsx renamed to apps/website/src/app/docs/packages/[package]/[...slug]/page.tsx

Lines changed: 77 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import shikiLangJavascript from 'shiki/languages/javascript.tmLanguage.json';
3030
import shikiLangTypescript from 'shiki/languages/typescript.tmLanguage.json';
3131
import shikiThemeDarkPlus from 'shiki/themes/dark-plus.json';
3232
import shikiThemeLightPlus from 'shiki/themes/light-plus.json';
33-
import vercelLogo from '../../../assets/powered-by-vercel.svg';
33+
import vercelLogo from '../../../../../assets/powered-by-vercel.svg';
3434
import { MDXRemote } from '~/components/MDXRemote';
3535
import { Nav } from '~/components/Nav';
3636
import { Class } from '~/components/model/Class';
@@ -44,84 +44,92 @@ import { DESCRIPTION, PACKAGES } from '~/util/constants';
4444
import { findMember, findMemberByKey } from '~/util/model.server';
4545
import { tryResolveDescription } from '~/util/summary';
4646

47-
export async function generateStaticParams() {
48-
return (
49-
await Promise.all(
50-
PACKAGES.map(async (packageName) => {
51-
try {
52-
let data: any[] = [];
53-
let versions: string[] = [];
54-
if (process.env.NEXT_PUBLIC_LOCAL_DEV) {
55-
const res = await readFile(
56-
join(cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'),
57-
'utf8',
58-
);
59-
data = JSON.parse(res);
60-
} else {
61-
const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`);
62-
versions = await response.json();
63-
versions = versions.slice(-2);
47+
export async function generateStaticParams({ params }: { params: { package: string } }) {
48+
const packageName = params.package;
6449

65-
for (const version of versions) {
66-
const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${version}.api.json`);
67-
data = [...data, await res.json()];
68-
}
69-
}
50+
try {
51+
let data: any[] = [];
52+
let versions: string[] = [];
53+
if (process.env.NEXT_PUBLIC_LOCAL_DEV) {
54+
const res = await readFile(join(cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'), 'utf8');
55+
data = JSON.parse(res);
56+
} else {
57+
const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`);
58+
versions = await response.json();
59+
versions = versions.slice(-2);
7060

71-
if (Array.isArray(data)) {
72-
const models = data.map((innerData) => createApiModel(innerData));
73-
const pkgs = models.map((model) => findPackage(model, packageName)) as ApiPackage[];
61+
for (const version of versions) {
62+
const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${version}.api.json`);
63+
data = [...data, await res.json()];
64+
}
65+
}
7466

75-
return [
76-
...versions.map((version) => ({ slug: ['packages', packageName, version] })),
77-
...pkgs.flatMap((pkg, idx) =>
78-
getMembers(pkg, versions[idx] ?? 'main').map((member) => {
79-
if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) {
80-
return {
81-
slug: [
82-
'packages',
83-
packageName,
84-
versions[idx] ?? 'main',
85-
`${member.name}:${member.overloadIndex}:${member.kind}`,
86-
],
87-
};
88-
}
67+
if (Array.isArray(data)) {
68+
const models = data.map((innerData) => createApiModel(innerData));
69+
const pkgs = models.map((model) => findPackage(model, packageName)) as ApiPackage[];
8970

90-
return {
91-
slug: ['packages', packageName, versions[idx] ?? 'main', `${member.name}:${member.kind}`],
92-
};
93-
}),
94-
),
95-
];
96-
}
71+
return [
72+
...versions.map((version) => ({ slug: ['packages', packageName, version] })),
73+
...pkgs.flatMap((pkg, idx) =>
74+
getMembers(pkg, versions[idx] ?? 'main').map((member) => {
75+
if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) {
76+
return {
77+
slug: [
78+
'packages',
79+
packageName,
80+
versions[idx] ?? 'main',
81+
`${member.name}:${member.overloadIndex}:${member.kind}`,
82+
],
83+
};
84+
}
9785

98-
const model = createApiModel(data);
99-
const pkg = findPackage(model, packageName)!;
86+
return {
87+
slug: ['packages', packageName, versions[idx] ?? 'main', `${member.name}:${member.kind}`],
88+
};
89+
}),
90+
),
91+
];
92+
}
10093

101-
return [
102-
{ slug: ['packages', packageName, 'main'] },
103-
...getMembers(pkg, 'main').map((member) => {
104-
if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) {
105-
return {
106-
slug: ['packages', packageName, 'main', `${member.name}:${member.overloadIndex}:${member.kind}`],
107-
};
108-
}
94+
const model = createApiModel(data);
95+
const pkg = findPackage(model, packageName)!;
10996

110-
return { slug: ['packages', packageName, 'main', `${member.name}:${member.kind}`] };
111-
}),
112-
];
113-
} catch {
114-
return { slug: ['packages', '404'] };
97+
return [
98+
{ slug: ['packages', packageName, 'main'] },
99+
...getMembers(pkg, 'main').map((member) => {
100+
if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) {
101+
return {
102+
slug: ['packages', packageName, 'main', `${member.name}:${member.overloadIndex}:${member.kind}`],
103+
};
115104
}
105+
106+
return { slug: ['packages', packageName, 'main', `${member.name}:${member.kind}`] };
116107
}),
117-
)
118-
).flat();
108+
];
109+
} catch {
110+
return { slug: [] };
111+
}
119112
}
120113

121-
async function getData(slug: string[]) {
122-
const [path, packageName = 'builders', branchName = 'main', member] = slug;
114+
async function getData(packageName: string, slug: string[]) {
115+
const [branchName = 'main', member] = slug;
116+
117+
if (!PACKAGES.includes(packageName)) {
118+
notFound();
119+
}
123120

124-
if (path !== 'packages' || !PACKAGES.includes(packageName)) {
121+
let data;
122+
try {
123+
if (process.env.NEXT_PUBLIC_LOCAL_DEV) {
124+
const res = await readFile(join(cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'), 'utf8');
125+
data = JSON.parse(res);
126+
} else {
127+
const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`, {
128+
next: { revalidate: 3_600 },
129+
});
130+
data = await res.json();
131+
}
132+
} catch {
125133
notFound();
126134
}
127135

@@ -161,21 +169,6 @@ async function getData(slug: string[]) {
161169
},
162170
});
163171

164-
let data;
165-
try {
166-
if (process.env.NEXT_PUBLIC_LOCAL_DEV) {
167-
const res = await readFile(join(cwd(), '..', '..', 'packages', packageName, 'docs', 'docs.api.json'), 'utf8');
168-
data = JSON.parse(res);
169-
} else {
170-
const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`, {
171-
next: { revalidate: 3_600 },
172-
});
173-
data = await res.json();
174-
}
175-
} catch {
176-
notFound();
177-
}
178-
179172
const model = createApiModel(data);
180173
const pkg = findPackage(model, packageName);
181174

@@ -261,8 +254,8 @@ function member(props?: ApiItemJSON | undefined) {
261254
}
262255
}
263256

264-
export default async function Page({ params }: { params: { slug: string[] } }) {
265-
const data = await getData(params.slug);
257+
export default async function Page({ params }: { params: { package: string; slug: string[] } }) {
258+
const data = await getData(params.package, params.slug);
266259

267260
// const name = useMemo(
268261
// () => `discord.js${params.data?.member?.name ? ` | ${params.data.member.name}` : ''}`,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { PropsWithChildren } from 'react';
2+
import { PACKAGES } from '~/util/constants';
3+
4+
export async function generateStaticParams() {
5+
return PACKAGES.map((packageName) => ({ package: packageName }));
6+
}
7+
8+
export default function PackageLayout({ children }: PropsWithChildren) {
9+
return children;
10+
}

apps/website/src/app/docs/packages/[package]/page.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ import Link from 'next/link';
55
import { notFound } from 'next/navigation';
66
import { PACKAGES } from '~/util/constants';
77

8-
export async function generateStaticParams() {
9-
return PACKAGES.map((packageName) => ({ package: packageName }));
10-
}
11-
128
async function getData(pkg: string) {
139
if (!PACKAGES.includes(pkg)) {
1410
notFound();

0 commit comments

Comments
 (0)