-
Notifications
You must be signed in to change notification settings - Fork 28k
/
Copy pathapp-dir-module.ts
46 lines (40 loc) · 1.26 KB
/
app-dir-module.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
import type { ComponentsType } from '../../build/webpack/loaders/next-app-loader'
import { DEFAULT_SEGMENT_KEY } from '../../shared/lib/segment'
/**
* LoaderTree is generated in next-app-loader.
*/
export type LoaderTree = [
segment: string,
parallelRoutes: { [parallelRouterKey: string]: LoaderTree },
components: ComponentsType,
]
export async function getLayoutOrPageModule(loaderTree: LoaderTree) {
const { layout, page, defaultPage } = loaderTree[2]
const isLayout = typeof layout !== 'undefined'
const isPage = typeof page !== 'undefined'
const isDefaultPage =
typeof defaultPage !== 'undefined' && loaderTree[0] === DEFAULT_SEGMENT_KEY
let value = undefined
let modType: 'layout' | 'page' | undefined = undefined
if (isLayout) {
value = await layout[0]()
modType = 'layout'
} else if (isPage) {
value = await page[0]()
modType = 'page'
} else if (isDefaultPage) {
value = await defaultPage[0]()
modType = 'page'
}
return [value, modType] as const
}
export async function getComponentTypeModule(
loaderTree: LoaderTree,
componentType: 'layout' | 'not-found'
) {
const { [componentType]: component } = loaderTree[2]
if (typeof component !== 'undefined') {
return await component[0]()
}
return undefined
}