(root: string, abs: string, folder: NoteFolder)
| 422 | } |
| 423 | |
| 424 | async function readMeta(root: string, abs: string, folder: NoteFolder): Promise<NoteMeta> { |
| 425 | const stat = await fs.stat(abs) |
| 426 | let body = '' |
| 427 | try { |
| 428 | body = await fs.readFile(abs, 'utf8') |
| 429 | } catch { |
| 430 | /* treat as empty */ |
| 431 | } |
| 432 | return { |
| 433 | path: toPosix(path.relative(root, abs)), |
| 434 | title: path.basename(abs, path.extname(abs)), |
| 435 | folder, |
| 436 | createdAt: stat.birthtimeMs || stat.ctimeMs, |
| 437 | updatedAt: stat.mtimeMs, |
| 438 | size: stat.size, |
| 439 | tags: extractTags(body), |
| 440 | wikilinks: extractWikilinks(body), |
| 441 | excerpt: buildExcerpt(body) |
| 442 | } |
| 443 | } |
| 444 | |
| 445 | /* ---------- Listing --------------------------------------------------- */ |
| 446 |
no test coverage detected