forked from transitive-bullshit/nextjs-notion-starter-kit
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathresolve-notion-page.ts
77 lines (65 loc) · 2.15 KB
/
resolve-notion-page.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { parsePageId } from 'notion-utils'
import { ExtendedRecordMap } from 'notion-types'
import * as acl from './acl'
import * as types from './types'
import { pageUrlOverrides, pageUrlAdditions } from './config'
import { getPage } from './notion'
import { getSiteMaps } from './get-site-maps'
import { getSiteForDomain } from './get-site-for-domain'
export async function resolveNotionPage(domain: string, rawPageId?: string) {
let site: types.Site
let pageId: string
let recordMap: ExtendedRecordMap
if (rawPageId && rawPageId !== 'index') {
pageId = parsePageId(rawPageId)
if (!pageId) {
// check if the site configuration provides an override of a fallback for
// the page's URI
const override =
pageUrlOverrides[rawPageId] || pageUrlAdditions[rawPageId]
if (override) {
pageId = parsePageId(override)
}
}
if (pageId) {
const resources = await Promise.all([
getSiteForDomain(domain),
getPage(pageId)
])
site = resources[0]
recordMap = resources[1]
} else {
// handle mapping of user-friendly canonical page paths to Notion page IDs
// e.g., /developer-x-entrepreneur versus /71201624b204481f862630ea25ce62fe
const siteMaps = await getSiteMaps()
const siteMap = siteMaps[0]
pageId = siteMap?.canonicalPageMap[rawPageId]
if (pageId) {
// TODO: we're not re-using the site from siteMaps because it is
// cached aggressively
// site = await getSiteForDomain(domain)
// recordMap = siteMap.pageMap[pageId]
const resources = await Promise.all([
getSiteForDomain(domain),
getPage(pageId)
])
site = resources[0]
recordMap = resources[1]
} else {
return {
error: {
message: `Not found "${rawPageId}"`,
statusCode: 404
}
}
}
}
} else {
site = await getSiteForDomain(domain)
pageId = site.rootNotionPageId
console.log(site)
recordMap = await getPage(pageId)
}
const props = { site, recordMap, pageId }
return { ...props, ...(await acl.pageAcl(props)) }
}