-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathindex.ts
48 lines (43 loc) · 1.35 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { Page, Step, Tab, Tile } from "./utils";
export interface Guide {
page: Page;
slug: string;
tile: Tile;
steps: Step[];
tabs?: Tab[];
}
const guides: Guide[] = await create({
nextjs: () => import("./nextjs"),
laravel: () => import("./laravel"),
nuxt: () => import("./nuxtjs"),
solidjs: () => import("./solidjs"),
sveltekit: () => import("./sveltekit"),
angular: () => import("./angular"),
"ruby-on-rails": () => import("./ruby-on-rails"),
"react-router": () => import("./react-router"),
phoenix: () => import("./phoenix"),
parcel: () => import("./parcel"),
symfony: () => import("./symfony"),
meteor: () => import("./meteor"),
adonisjs: () => import("./adonisjs"),
emberjs: () => import("./emberjs"),
astro: () => import("./astro"),
qwik: () => import("./qwik"),
rspack: () => import("./rspack"),
dotnet: () => import("./dotnet"),
});
async function create(list: Record<string, () => Promise<any>>): Promise<Guide[]> {
return await Promise.all(
Object.entries(list).map(async ([slug, mod]) => {
return Object.create(await mod(), {
slug: { value: slug },
});
}),
);
}
export async function loadGuide(slug: string): Promise<Guide | null> {
return guides.find((guide) => guide.slug === slug) ?? null;
}
export async function loadGuides(): Promise<Guide[]> {
return Object.values(guides);
}