aboutsummaryrefslogtreecommitdiff
path: root/demos/hello-next/bun-framework-next/page-loader.ts
blob: 84e623ab1889b7929245562c8eee11c7315a2daa (plain) (blame)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import NextPageLoader from "next/dist/client/page-loader";
import getAssetPathFromRoute from "next/dist/shared/lib/router/utils/get-asset-path-from-route";
import createRouteLoader from "./route-loader";

export default class PageLoader extends NextPageLoader {
  public routeLoader: RouteLoader;

  constructor(_, __, pages) {
    super(_, __);

    // TODO: assetPrefix?
    this.routeLoader = createRouteLoader("");
    this.pages = pages;
  }

  getPageList() {
    return Object.keys(this.pages);
  }

  async loadPage(route: string): Promise<GoodPageCache> {
    try {
      const assets =
        globalThis.__NEXT_DATA__.pages[route] ||
        globalThis.__NEXT_DATA__.pages[getAssetPathFromRoute(route)];

      var src;
      console.log(getAssetPathFromRoute(route), assets);
      for (let asset of assets) {
        if (!asset.endsWith(".css")) {
          src = asset;
          break;
        }
      }

      console.assert(src, "Invalid or unknown route passed to loadPage");
      const res = await import(src);
      console.log({ res });

      return {
        page: res.default,
        mod: res,
        __N_SSG: false,
        __N_SSP: false,
      };
    } catch (err) {}

    // return this.routeLoader.loadRoute(route).then((res) => {
    //   debugger;
    //   if ("component" in res) {
    //     return {
    //       page: res.component,
    //       mod: res.exports,
    //       styleSheets: res.styles.map((o) => ({
    //         href: o.href,
    //         text: o.content,
    //       })),
    //     };
    //   }
    //   throw res.error;
    // });
  }

  // not used in development!
  prefetch(route: string): Promise<void> {
    return this.routeLoader.prefetch(route);
  }
}