@@ -81,49 +81,69 @@ export async function getPageWithRetry(id, from, retryAttempts = 3) {
81
81
function filterPostBlocks ( id , blockMap , slice ) {
82
82
const clonePageBlock = deepClone ( blockMap )
83
83
let count = 0
84
+ const blocksToProcess = Object . keys ( clonePageBlock ?. block || { } )
84
85
85
86
// 循环遍历文档的每个block
86
- for ( const i in clonePageBlock ?. block ) {
87
- const b = clonePageBlock ?. block [ i ]
88
- if ( slice && slice > 0 && count > slice ) {
89
- delete clonePageBlock ?. block [ i ]
90
- continue
87
+ for ( let i = 0 ; i < blocksToProcess . length ; i ++ ) {
88
+ const blockId = blocksToProcess [ i ]
89
+ const b = clonePageBlock ?. block [ blockId ]
90
+
91
+ if ( slice && slice > 0 && count > slice ) {
92
+ delete clonePageBlock ?. block [ blockId ]
93
+ continue
94
+ }
95
+
96
+ // 当BlockId等于PageId时移除
97
+ if ( b ?. value ?. id === id ) {
98
+ // 此block含有敏感信息
99
+ delete b ?. value ?. properties
100
+ continue
101
+ }
102
+
103
+ count ++
104
+
105
+ if ( b ?. value ?. type === 'sync_block' && b ?. value ?. children ) {
106
+ const childBlocks = b . value . children
107
+ // 移除同步块
108
+ delete clonePageBlock . block [ blockId ]
109
+ // 用子块替代同步块
110
+ childBlocks . forEach ( ( childBlock , index ) => {
111
+ const newBlockId = `${ blockId } _child_${ index } `
112
+ clonePageBlock . block [ newBlockId ] = childBlock
113
+ blocksToProcess . splice ( i + index + 1 , 0 , newBlockId )
114
+ } )
115
+ // 重新处理新加入的子块
116
+ i --
117
+ continue
118
+ }
119
+
120
+ // 处理 c++、c#、汇编等语言名字映射
121
+ if ( b ?. value ?. type === 'code' ) {
122
+ if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'C++' ) {
123
+ b . value . properties . language [ 0 ] [ 0 ] = 'cpp'
91
124
}
92
- // 当BlockId等于PageId时移除
93
- if ( b ?. value ?. id === id ) {
94
- // 此block含有敏感信息
95
- delete b ?. value ?. properties
96
- continue
125
+ if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'C#' ) {
126
+ b . value . properties . language [ 0 ] [ 0 ] = 'csharp'
97
127
}
98
-
99
- count ++
100
- // 处理 c++、c#、汇编等语言名字映射
101
- if ( b ?. value ?. type === 'code' ) {
102
- if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'C++' ) {
103
- b . value . properties . language [ 0 ] [ 0 ] = 'cpp'
104
- }
105
- if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'C#' ) {
106
- b . value . properties . language [ 0 ] [ 0 ] = 'csharp'
107
- }
108
- if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'Assembly' ) {
109
- b . value . properties . language [ 0 ] [ 0 ] = 'asm6502'
110
- }
111
- }
112
-
113
- // 如果是文件,或嵌入式PDF,需要重新加密签名
114
- if (
115
- ( b ?. value ?. type === 'file' ||
116
- b ?. value ?. type === 'pdf' ||
117
- b ?. value ?. type === 'video' ||
118
- b ?. value ?. type === 'audio' ) &&
119
- b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ] &&
120
- b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ] . indexOf ( 'amazonaws.com' ) > 0
121
- ) {
122
- const oldUrl = b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ]
123
- const newUrl = `https://notion.so/signed/${ encodeURIComponent ( oldUrl ) } ?table=block&id=${ b ?. value ?. id } `
124
- b . value . properties . source [ 0 ] [ 0 ] = newUrl
128
+ if ( b ?. value ?. properties ?. language ?. [ 0 ] [ 0 ] === 'Assembly' ) {
129
+ b . value . properties . language [ 0 ] [ 0 ] = 'asm6502'
125
130
}
126
131
}
132
+
133
+ // 如果是文件,或嵌入式PDF,需要重新加密签名
134
+ if (
135
+ ( b ?. value ?. type === 'file' ||
136
+ b ?. value ?. type === 'pdf' ||
137
+ b ?. value ?. type === 'video' ||
138
+ b ?. value ?. type === 'audio' ) &&
139
+ b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ] &&
140
+ b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ] . indexOf ( 'amazonaws.com' ) > 0
141
+ ) {
142
+ const oldUrl = b ?. value ?. properties ?. source ?. [ 0 ] [ 0 ]
143
+ const newUrl = `https://notion.so/signed/${ encodeURIComponent ( oldUrl ) } ?table=block&id=${ b ?. value ?. id } `
144
+ b . value . properties . source [ 0 ] [ 0 ] = newUrl
145
+ }
146
+ }
127
147
128
148
// 去掉不用的字段
129
149
if ( id === BLOG . NOTION_PAGE_ID ) {
0 commit comments