Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions lib/db/SiteDataApi.js
Original file line number Diff line number Diff line change
Expand Up @@ -301,10 +301,14 @@ async function convertNotionToSiteData(SITE_DATABASE_PAGE_ID, from, pageRecordMa
}

// 解析读取根数据库信息
const collectionId = rawMetadata?.collection_id
const collectionMap = pageRecordMap.collection || {}
const inferredCollectionId = Object.keys(collectionMap).length === 1
? Object.keys(collectionMap)[0]
: null
const collectionId = rawMetadata?.collection_id || inferredCollectionId
const rawCollection =
pageRecordMap.collection?.[collectionId] ||
pageRecordMap.collection?.[idToUuid(collectionId)] ||
collectionMap?.[collectionId] ||
collectionMap?.[idToUuid(collectionId)] ||
{}

const collection = normalizeCollection(rawCollection)
Expand Down
16 changes: 6 additions & 10 deletions lib/db/notion/getAllPageIds.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,20 @@ export default function getAllPageIds(collectionQuery, collectionId, collectionV
}
}

// ── 策略2:遍历所有 viewId 的 page_sort 兜底 ──
if (pageSet.size === 0 && collectionView) {
// ── 策略2:补充所有 view 的 page_sort,避免目标视图 page_sort 不完整 ──
if (collectionView) {
Object.values(collectionView).forEach(viewEntry => {
const pageSort = viewEntry?.value?.value?.page_sort
if (Array.isArray(pageSort)) {
pageSort.forEach(id => pageSet.add(id))
}
})
if (pageSet.size > 0) {
// console.log('[getAllPageIds] 策略2命中 page_sort(遍历),数量:', pageSet.size)
}
}

// ── 策略3:旧格式兼容,从 collectionQuery 取 ──
if (pageSet.size === 0 && collectionQuery && collectionId) {
// ── 策略3:始终合并 collectionQuery ──
// 某些新版 Notion 数据源里,API 新建页会先进入 collectionQuery,
// 但 page_sort 刷新滞后;如果只在 page_sort 为空时才读 collectionQuery,会漏掉新页。
if (collectionQuery && collectionId) {
const viewQuery = collectionQuery?.[collectionId]
if (viewQuery) {
Object.values(viewQuery).forEach(viewData => {
Expand All @@ -41,9 +40,6 @@ export default function getAllPageIds(collectionQuery, collectionId, collectionV
if (Array.isArray(ids)) ids.forEach(id => pageSet.add(id))
})
})
if (pageSet.size > 0) {
// console.log('[getAllPageIds] 策略3命中 collectionQuery(旧格式),数量:', pageSet.size)
}
}
}

Expand Down
12 changes: 10 additions & 2 deletions lib/db/notion/getNotionConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,16 @@ export async function getConfigMapFromConfigPage(allPages) {
console.error(`pageId "${configTableId}" is not a database`)
return null
}
const collectionId = rawMetadata?.collection_id
const collection = normalizeCollection(pageRecordMap.collection[collectionId].value)
const collectionMap = pageRecordMap.collection || {}
const inferredCollectionId = Object.keys(collectionMap).length === 1
? Object.keys(collectionMap)[0]
: null
const collectionId = rawMetadata?.collection_id || inferredCollectionId
const rawCollection =
collectionMap?.[collectionId] ||
collectionMap?.[collectionId?.replace(/-/g, '')] ||
{}
const collection = normalizeCollection(rawCollection)
const collectionQuery = pageRecordMap.collection_query
const collectionView = pageRecordMap.collection_view
const schema = normalizeSchema(collection?.schema || {})
Expand Down
4 changes: 2 additions & 2 deletions lib/db/notion/normalizeUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ function normalizeNotionMetadata(block, pageId) {
function normalizeCollection(collection) {
let current = collection

// 最多剥 3 层,防止死循环
for (let i = 0; i < 3; i++) {
// 最多剥 5 层,兼容 { spaceId, value: { value: {...}, role } } 等新结构
for (let i = 0; i < 5; i++) {
if (!current) break

// 已经是最终形态:有 schema
Expand Down
12 changes: 6 additions & 6 deletions pages/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { siteConfig } from '@/lib/config'
import { fetchGlobalAllData, getPostBlocks } from '@/lib/db/SiteDataApi'
import { generateRobotsTxt } from '@/lib/utils/robots.txt'
import { generateRss } from '@/lib/utils/rss'
import { generateSitemapXml } from '@/lib/utils/sitemap.xml'
// import { generateSitemapXml } from '@/lib/utils/sitemap.xml'
import { DynamicLayout } from '@/themes/theme'
import { generateRedirectJson } from '@/lib/utils/redirect'
import { checkDataFromAlgolia } from '@/lib/plugins/algolia'
Expand Down Expand Up @@ -61,7 +61,7 @@ export async function getStaticProps(req) {
// 生成Feed订阅
generateRss(props)
// 生成
generateSitemapXml(props)
// generateSitemapXml(props)
// 检查数据是否需要从algolia删除
checkDataFromAlgolia(props)
if (siteConfig('UUID_REDIRECT', false, props?.NOTION_CONFIG)) {
Expand All @@ -78,10 +78,10 @@ export async function getStaticProps(req) {
revalidate: process.env.EXPORT
? undefined
: siteConfig(
'NEXT_REVALIDATE_SECOND',
BLOG.NEXT_REVALIDATE_SECOND,
props.NOTION_CONFIG
)
'NEXT_REVALIDATE_SECOND',
BLOG.NEXT_REVALIDATE_SECOND,
props.NOTION_CONFIG
)
}
}

Expand Down