Skip to content
Closed

合并 #4077

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
16 changes: 16 additions & 0 deletions .github/workflows/auto-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Auto Deploy to Cloudflare

on:
schedule:
# 每天北京时间凌晨 4 点 (UTC 20:00) 执行一次
- cron: '0 20 * * *'
workflow_dispatch: # 允许手动点击按钮触发

jobs:
trigger-deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger Cloudflare Deploy Hook
# 注意:这里引用的是 secrets.CF_DEPLOY_HOOK
# 请确保你在仓库 Settings -> Secrets and variables -> Actions 里已经添加了这个密钥
run: curl -X POST "${{ secrets.CF_DEPLOY_HOOK }}"
7 changes: 4 additions & 3 deletions blog.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ const BLOG = {
NOTION_PAGE_ID:
process.env.NOTION_PAGE_ID ||
'02ab3b8678004aa69e9e415905ef32a5,en:7c1d570661754c8fbc568e00a01fd70e',
THEME: process.env.NEXT_PUBLIC_THEME || 'simple', // 当前主题,在themes文件夹下可找到所有支持的主题;主题名称就是文件夹名,例如 example,fukasawa,gitbook,heo,hexo,landing,matery,medium,next,nobelium,plog,simple
THEME: process.env.NEXT_PUBLIC_THEME || 'feitwnd', // 当前主题,在themes文件夹下可找到所有支持的主题;主题具体配置请参考`themes/主题名/config.js`awa,gitbook,heo,hexo,landing,matery,medium,next,nobelium,plog,simple
THEME_SWITCH: process.env.NEXT_PUBLIC_THEME_SWITCH || true, // 是否显示切换主题按钮
LANG: process.env.NEXT_PUBLIC_LANG || 'zh-CN', // e.g 'zh-CN','en-US' see /lib/lang.js for more.
SINCE: process.env.NEXT_PUBLIC_SINCE || 2021, // e.g if leave this empty, current year will be used.

Expand All @@ -17,7 +18,7 @@ const BLOG = {

AUTHOR: process.env.NEXT_PUBLIC_AUTHOR || 'NotionNext', // 您的昵称 例如 tangly1024
BIO: process.env.NEXT_PUBLIC_BIO || '一个普通的干饭人🍚', // 作者简介
LINK: process.env.NEXT_PUBLIC_LINK || 'https://tangly1024.com', // 网站地址
LINK: process.env.NEXT_PUBLIC_LINK || 'https://jishu.nn.kg', // 网站地址
KEYWORDS: process.env.NEXT_PUBLIC_KEYWORD || 'Notion, 博客', // 网站关键词 英文逗号隔开
BLOG_FAVICON: process.env.NEXT_PUBLIC_FAVICON || '/favicon.ico', // blog favicon 配置, 默认使用 /public/favicon.ico,支持在线图片,如 https://img.imesong.com/favicon.png
BEI_AN: process.env.NEXT_PUBLIC_BEI_AN || '', // 备案号 闽ICP备XXXXXX
Expand Down Expand Up @@ -71,4 +72,4 @@ const BLOG = {
UUID_REDIRECT: process.env.UUID_REDIRECT || false
}

module.exports = BLOG
module.exports = BLOG
6 changes: 3 additions & 3 deletions conf/font.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module.exports = {
FONT_STYLE: process.env.NEXT_PUBLIC_FONT_STYLE || 'font-sans font-light',
// 字体CSS 例如 https://npm.elemecdn.com/lxgw-wenkai-webfont@1.6.0/style.css
FONT_URL: [
// 'https://npm.elemecdn.com/lxgw-wenkai-webfont@1.6.0/style.css',
'https://npm.elemecdn.com/lxgw-wenkai-webfont@latest/style.css',
'https://fonts.googleapis.com/css?family=Bitter:300,400,700&display=swap',
'https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap',
'https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@300;400;500;700&display=swap'
Expand All @@ -21,7 +21,7 @@ module.exports = {
FONT_SUBSET: process.env.NEXT_PUBLIC_FONT_SUBSET || 'chinese-simplified',
// 无衬线字体 例如'"LXGW WenKai"'
FONT_SANS: [
// '"LXGW WenKai"',
'"LXGW WenKai"',
'"PingFang SC"',
'-apple-system',
'BlinkMacSystemFont',
Expand All @@ -41,7 +41,7 @@ module.exports = {
],
// 衬线字体 例如'"LXGW WenKai"'
FONT_SERIF: [
// '"LXGW WenKai"',
'"LXGW WenKai"',
'Bitter',
'"Noto Serif SC"',
'SimSun',
Expand Down
4 changes: 4 additions & 0 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ export const siteConfig = (key, defaultVal = null, extendConfig = {}) => {
break
}
}
// 对于 THEME,优先使用本地 blog.config.js 定义的值 (为了强制 feitwnd 生效)
if (key === 'THEME') {
return convertVal(getValue(BLOG[key], defaultVal))
}
return convertVal(
getValue(extendConfig[key], getValue(defaultVal, BLOG[key]))
)
Expand Down
16 changes: 11 additions & 5 deletions lib/db/notion/getPageTableOfContents.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ function getBlockHeader(contents, recordMap, toc) {
}

for (const blockId of contents) {
if (!blockId) {
continue // 跳过无效的 blockId
}
const block = recordMap.block[blockId]?.value
if (!block) {
continue
Expand All @@ -83,11 +86,14 @@ function getBlockHeader(contents, recordMap, toc) {
})
}
} else if (type === 'transclusion_reference') {
getBlockHeader(
[block.format.transclusion_reference_pointer.id],
recordMap,
toc
)
const transclusionId = block.format?.transclusion_reference_pointer?.id
if (transclusionId) {
getBlockHeader(
[transclusionId],
recordMap,
toc
)
}
} else if (type === 'transclusion_container') {
getBlockHeader(block.content, recordMap, toc)
}
Expand Down
22 changes: 19 additions & 3 deletions lib/db/notion/getPostBlocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,15 @@ export function formatNotionBlock(block) {
delete clonedBlock[blockId]
// 用子块替代同步块
childBlocks.forEach((childBlock, index) => {
const newBlockId = `${blockId}_child_${index}`
clonedBlock[newBlockId] = childBlock
// 确保 childBlock 有有效的结构
if (!childBlock) return

// 提取子块的实际数据
const actualBlock = childBlock.value || childBlock
if (!actualBlock || !actualBlock.id) return

const newBlockId = actualBlock.id || `${blockId}_child_${index}`
clonedBlock[newBlockId] = { value: actualBlock }
blocksToProcess.splice(i + index + 1, 0, newBlockId)
})
// 重新处理新加入的子块
Expand Down Expand Up @@ -134,7 +141,16 @@ export function formatNotionBlock(block) {
}
}

return clonedBlock
// 过滤掉没有有效 id 的 block
const filteredBlock = {}
for (const [id, block] of Object.entries(clonedBlock || {})) {
// 检查 block.value 是否存在且有效
if (block?.value && (block.value.id || block.value.type)) {
filteredBlock[id] = block
}
}

return filteredBlock
}

/**
Expand Down
16 changes: 12 additions & 4 deletions lib/utils/notion.util.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* 旧版 block:{ value:{}}
* 新版 block:{ spaceId:{ id:{ value:{} } } }
* 强制解包成旧版
* @param {*} blockMap
* @returns
* @param {*} blockMap
* @returns
*/
export function adapterNotionBlockMap(blockMap) {
if (!blockMap) return blockMap;
Expand All @@ -14,11 +14,19 @@ export function adapterNotionBlockMap(blockMap) {
const cleanedCollection = {};

for (const [id, block] of Object.entries(blockMap.block || {})) {
cleanedBlocks[id] = { value: unwrapValue(block) };
// 跳过没有 id 的 block
if (!id) continue;
const unwrappedValue = unwrapValue(block);
// 跳过没有 id 的 block value
if (!unwrappedValue || !unwrappedValue.id) continue;
cleanedBlocks[id] = { value: unwrappedValue };
}

for (const [id, collection] of Object.entries(blockMap.collection || {})) {
cleanedCollection[id] = { value: unwrapValue(collection) };
if (!id) continue;
const unwrappedValue = unwrapValue(collection);
if (!unwrappedValue || !unwrappedValue.id) continue;
cleanedCollection[id] = { value: unwrappedValue };
}

return {
Expand Down
4 changes: 2 additions & 2 deletions pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { getBaseLayoutByTheme } from '@/themes/theme'
import { useRouter } from 'next/router'
import { useCallback, useMemo } from 'react'
import { getQueryParam } from '../lib/utils'
import { siteConfig } from '@/lib/config'

// 各种扩展插件 这个要阻塞引入
import BLOG from '@/blog.config'
Expand All @@ -37,8 +38,7 @@ const MyApp = ({ Component, pageProps }) => {
const theme = useMemo(() => {
return (
getQueryParam(route.asPath, 'theme') ||
pageProps?.NOTION_CONFIG?.THEME ||
BLOG.THEME
siteConfig('THEME', BLOG.THEME, pageProps?.NOTION_CONFIG)
)
}, [route])

Expand Down
104 changes: 104 additions & 0 deletions server_error.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@

> notion-next@4.9.3.1 dev
> next dev

Deleted existing sitemap.xml from public directory
Deleted existing sitemap.xml from root directory
鈿?Port 3000 is in use, trying 3001 instead.
鈿?Port 3001 is in use, trying 3002 instead.
鈿?Port 3002 is in use, trying 3003 instead.
鈿?Port 3003 is in use, trying 3004 instead.
鈿?Port 3004 is in use, trying 3005 instead.
鈿?Port 3005 is in use, trying 3006 instead.
鈿?Port 3006 is in use, trying 3007 instead.
鈻?Next.js 14.2.30
- Local: http://localhost:3007
- Experiments (use with caution):
路 scrollRestoration

鉁?Starting...
[Locales] 02ab3b8678004aa69e9e415905ef32a5
[Locales] en:7c1d570661754c8fbc568e00a01fd70e
[榛樿涓婚] E:\work\NotionNext\themes\feitwnd
鉁?Ready in 3.6s
鉁?Compiled /middleware in 178ms (215 modules)
鈼?Compiling / ...
Browserslist: browsers data (caniuse-lite) is 9 months old. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: https://github.com/browserslist/update-db#readme
鉁?Compiled / in 2.7s (1004 modules)
鉁?Compiled in 486ms (1004 modules)
[API-->>璇锋眰] from:index id:02ab3b8678004aa69e9e415905ef32a5
GET / 200 in 3522ms
[API<<--鍝嶅簲] 鑰楁椂:4477ms - from:index
[API-->>璇锋眰] from:config-table id:8f4fe6b1-7a9e-43e0-bcfb-6edb50f10a62
[API<<--鍝嶅簲] 鑰楁椂:1749ms - from:config-table
[API-->>璇锋眰] from:data-notice id:571f2540-eb8a-42ee-84f5-85f1583430ae
[API<<--鍝嶅簲] 鑰楁椂:584ms - from:data-notice
[RSS璁㈤槄] 鐢熸垚/rss/feed.xml
[API-->>璇锋眰] from:rss-content id:a6271da0-6b8f-47a3-9735-e8fa770f1d9f
[API<<--鍝嶅簲] 鑰楁椂:3462ms - from:rss-content
TypeError: Cannot read properties of undefined (reading 'replaceAll')
at uuidToId (file:///E:/work/NotionNext/node_modules/notion-utils/build/index.js:533:31)
at Block (file:///E:/work/NotionNext/node_modules/react-notion-x/build/index.js:2579:66)
at renderWithHooks (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5662:16)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5736:15)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5790:7)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderContextProvider (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5935:3)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6032:11)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
猕?unhandledRejection: TypeError: Cannot read properties of undefined (reading 'replaceAll')
at uuidToId (file:///E:/work/NotionNext/node_modules/notion-utils/build/index.js:533:31)
at Block (file:///E:/work/NotionNext/node_modules/react-notion-x/build/index.js:2579:66)
at renderWithHooks (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5662:16)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5736:15)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5790:7)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderContextProvider (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5935:3)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6032:11)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
猕?unhandledRejection: TypeError: Cannot read properties of undefined (reading 'replaceAll')
at uuidToId (file:///E:/work/NotionNext/node_modules/notion-utils/build/index.js:533:31)
at Block (file:///E:/work/NotionNext/node_modules/react-notion-x/build/index.js:2579:66)
at renderWithHooks (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5662:16)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5736:15)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderIndeterminateComponent (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5790:7)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5961:7)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
at renderContextProvider (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:5935:3)
at renderElement (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6032:11)
at renderNodeDestructiveImpl (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6119:11)
at renderNodeDestructive (E:\work\NotionNext\node_modules\react-dom\cjs\react-dom-server-legacy.node.development.js:6091:14)
鉁?Compiled in 857ms (1004 modules)
鉁?Compiled /_error in 181ms (1004 modules)
猕?Error: Cannot find module './heo '
at E:\work\NotionNext\.next\server\pages\index.js:1210:11
at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
code: 'MODULE_NOT_FOUND',
page: '/'
}
GET / 500 in 379ms
鉁?Compiled in 10.1s (2914 modules)
<w> [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: ENOENT: no such file or directory, rename 'E:\work\NotionNext\.next\cache\webpack\server-development\1.pack.gz_' -> 'E:\work\NotionNext\.next\cache\webpack\server-development\1.pack.gz'
<w> [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: ENOENT: no such file or directory, rename 'E:\work\NotionNext\.next\cache\webpack\client-development\1.pack.gz_' -> 'E:\work\NotionNext\.next\cache\webpack\client-development\1.pack.gz'
鉁?Compiled in 2.7s (2880 modules)
<w> [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: ENOENT: no such file or directory, rename 'E:\work\NotionNext\.next\cache\webpack\server-development\1.pack.gz_' -> 'E:\work\NotionNext\.next\cache\webpack\server-development\1.pack.gz'
<w> [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: ENOENT: no such file or directory, rename 'E:\work\NotionNext\.next\cache\webpack\client-development\2.pack.gz_' -> 'E:\work\NotionNext\.next\cache\webpack\client-development\2.pack.gz'
鉁?Compiled in 4.2s (2880 modules)
Loading