| 162 | * @param onProgress 进度回调(可选) |
| 163 | */ |
| 164 | export async function parseFileSync( |
| 165 | filePath: string, |
| 166 | onProgress?: (progress: ParseProgress) => void |
| 167 | ): Promise<ParseResult> { |
| 168 | let meta: ParsedMeta | null = null |
| 169 | const members: ParsedMember[] = [] |
| 170 | const messages: ParsedMessage[] = [] |
| 171 | |
| 172 | for await (const event of parseFile({ filePath, onProgress })) { |
| 173 | switch (event.type) { |
| 174 | case 'meta': |
| 175 | meta = event.data |
| 176 | break |
| 177 | case 'members': |
| 178 | members.push(...event.data) |
| 179 | break |
| 180 | case 'messages': |
| 181 | messages.push(...event.data) |
| 182 | break |
| 183 | case 'progress': |
| 184 | onProgress?.(event.data) |
| 185 | break |
| 186 | case 'error': |
| 187 | throw event.data |
| 188 | } |
| 189 | } |
| 190 | |
| 191 | if (!meta) { |
| 192 | throw new Error('解析失败:未获取到元信息') |
| 193 | } |
| 194 | |
| 195 | return { meta, members, messages } |
| 196 | } |
| 197 | |
| 198 | /** |
| 199 | * 解析文件获取基本信息(只统计,不返回完整消息) |